객체의 구성 요소
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 이름만으로도 접근 가능하다.
*


댓글
댓글 쓰기