2020.09.19 토요일 보충강의 - 객체생성 정리하면서 공부할것.

 객체의 구성 요소 

1. 

멤버변수 : 속성 또는 필드 전역변수

     ==> 클래스 내부 메서드 외부에 선언한다. 

     ==> 맴버변수는 초기화하지 않으면 자동으로 초기화된다.

              -> 숫자형은 0으로, 참조형은 null로 논리형은 false 로 자동으로

                  초기화가 된다. 

지역변수  : 메서드 내부에서 만들어진 변수 

메서드 내부에서 만들어진 변수 

메서드의 매개변수도 지역변수가 된다. 




2.  

메서드 ==> 전용함수라고도 한다. 

해당 객체의 기능을 구현한다. 


3. 객체를 만드려면 객체의 설계도가 필요하잖아 


이클립스

package basic ; 

PUBLIC CLASS Tv

--> 쉽게 말하려면 class는 객체의 설계도라고 할 수 있다. 

--> 메서드들을 구현해 놓는다.

String color ; // 색상 

boolean power ;   // 전원 상태 

int channel ;  //채널 


--> 멤버변수를 선언한것 


//메서드 선언 및 구현 

//전원 on/off 기능 --> 전원상태를 현재의 반대 상태가 되게 한다.  


public void powerOnOff(){ 

    if(power==true){

        power = false; 

    }else{

        power = true; 

       } 

}

if문 없이 쓸때는 

power = !power; 


public void channelUp() { //채널을 올린다.

    channel++; 

}


public void channelDown(){ //채널을 내리는것

    channel--; 

}  


---------------------------------------------------------------------------------

설계도를 보고 만들어라

Tv를 만들어라 ! 



Tv t = new Tv();

System.out.println (" 변경전 ; " + t.channel); 

t.channel = 15; 

System.out.println("변경후 : " + t.channel ) ; 

이러면 15로 변경되서 출력이 된다. 

System.out.println(" 변경전 : + t.color ) ; 

System.out.println(" 변경전 : + t.power ) ;

 두개는 color 는 false로 power 는 null로 됨 


Tv t2 = new Tv(); 


t랑 t2라는거랑은 다름 


메서드영역에서 TV정보를 읽고 COLOR . CHANNEL POWER 애들이 있네 그 구조네 하고 읽고

이거를 heap 에 또 그 정보를 기본정보를 초기화해줌. 

생성자를 호출한다. 


t2.channel = 100; 이렇게하면 

heap 에서의 channel 에 있는애가 100으로 변경된다. 



* new 로 만들면 모양, 형태 하는일 기능등은 같지만 다른애로 거기에 각각다른 정보를 넣어주겠지? 그게 t , tv 가 되는것. 




t.powerOnOff(); 


 



의미 : 

생성자 

-반환값이 없다.(반환값 자료형이 없다. )

-그래서 void 자체를 표현하지 않는다. 그리고 

-메소드명이랑 클래스이름이랑 같다. 


public Tv() { 

channel = 6; 

}


--------------------------------------------------------------------------------------

jvm (java virtual machine ) 이 메소드영역, 콜스텍 , heap 영역 

heap 영역은 다른곳(메소드, 콜스텍 ) 에서 공통으로 쓰인것 다른것들이 차지하고 난 나머지 

메소드영역 : 

클래스정보, static 이라고 써있는 것들이 저장됨 

메소드는 호출해야 사용을 하는데 main 메소드는 자바가상머신이 자동으로 

호출한다. 


-----------------------------------JVM 


TV라는 CLASS 생김 

STATIC들은 읽혀질때 저장이된다. 

----------------------------------------------heap

클래스정보들을 읽어다가 heap 에 메모리에 맞게 저장이된다. 

heap 에 

맴버번수인 color . power, channel 이 만들어진다. 

color 초기값 null, power false, channel 0 

생성자까지 생성되면 heap 에 있는 애에 값이 하나씩 입력된다 

heap 에 있는 그 덩어리의 시작주소가 


콜스텍에 저장된다  


Tv t = new Tv(); 


이 = 이라는 것이 heap 이 콜스텍에 저장이 된것. 









-----------------------

콜스텍에 메인메소드영역이 만들어진다. 

지역변수가 콜스텍에 만들어짐 


메인메소드인 main ( String [] args) 가 콜스텍에 저장된다. 

t라고 하는 공간도 만들어진다. ( TV라고 하는 참조값을 저장하는것 ) 









-----------------------------------------------------------------------------------

t.channel = 15; 하면 


객체를  heap 에다가 만들었는데 

heap 에 접근하고 싶은데, 참조값(콜스텍에 있는 )

t. 얘가 heap 에 있는 애의 주소를 가리킨다. 

t가 가리키는 번지에 가서 heap 으로 가서 그 안에서 덩어리뭉텅이가 있는 곳에서 값을 15 로 바꿔줘라라는 의미 

 




-----------------------------------------



지역변수는 콜스텍에 만들어짐 


콜스텍에


메인메소드칸 위에 method 영역들이 생기고 여기서 지역변수들 생성되서 일처리하는게 heap에 가서 자기 덩어리로 가서 뭐 변경을 시키든 뭐를 하든 한 뒤에 ----->

메인메소드칸이 있고


------> 다 끝나면 메인메소드칸 위에 있는 method 영역들이 사라지고 다시 그 밑에 있는 main 메소드 칸으로 다시 돌아간다. 


지역변수는 사용을 하고 사용을 다하면 사라진다. 



----------------------------

static 을 쓰면 여러클래스에서 공통으로 관리되는 값이다. 그것은 메소드 영역에 저장되는것. 


static 영역이 있으면 --> test 라는 이름의 초기화 0 




---------------------------------------------------------------

static가 들어가 있는애 에서는 공통이니까 

멤버변수는 heap 에 있기 때문에 자기공간의 값만 바꿈 그래서 heap 에 있는 덩어리 값이

동일하지만 


static 변수는 덩어리값이 2개고 2개값이 메소드영역에서 한번에 바뀌기 때문에 

만약 static 변수를 heap 에 있는 1번 덩어리가 바꿔주고 2번덩어리가 바꿔주면 

값이 3이 되는데


그냥 변수는 heap 에서 그냥 바뀌는거야 1번 1번 그래서 덩어리가 1번 2번이니까 합계가

아니라 각각 한개씩만 더해주는것. 





--- static 변수는 참조변수로 접근 가능하고 CLASS 이름만으로도 접근 가능하다. 









댓글