객체를 다룰려면
리모컨(참조변수)가 필요
리모컨을 만들어주고
- 객체 만들어준 다음
- 대입연산자로 리모컨과 객체 연결
Tv t;
t = new Tv();
||
Tv t = new Tv();
이렇게 합쳐서 쓸 수 있음
객체의 사용 의미
: 변수와 메서드 사용
메서드 사용 = 메서드 호출
메서드 호출하면 해당
문장 내에 있는 메서드 사용됨
1) 클래스 작성(설계도)
2) 객체 생성(제품)
3) 객체 사용
Tv t;
: 변수선언문
Tv는 변수의 타입이
기본형 타입이 아니라
참조형 타입 변수
(기본형 8개에 포함X)
참조변수(리모컨)만들어지고
(저장할 공간)
t = new Tv();
객체도 생성해준다
객체주소가 참조변수(리모컨)에 대입됨
=> 대입연산자에 의해서
리모컨하고 TV를 연결해주는 것
객체를 다룰 때 반드시
TV리모컨(참조변수)
통해서만 다룰 수 있음.
리모컨 타입과 객체 타입은
일치해야 함 (ex: Tv)
객체를 생성할 때는
class의 내용에 따라 생성됨
멤버
: Tv 라는 class가
6개 구성요소를
갖고 있다는 뜻
(변수 3개 + 메서드3개)
<객체 사용방법>
t channel = 7;
=> 리모컨 t가 가리키는 객체의 채널을 의미
채널이라는 변수에다가 7을 저장함
리모컨 t가 가르키는 객체의 channel 이라는 변수에 7을 저장.
그러면 처음에 0이었다가 7이 됨
<메서드를 사용하는 방법>
channelDown이라는 메서드를 호출함
메서드 사용
= 메서드 호출이라고 하기도 함
: 메서드 불러와서 일 시키는 것
사용을 하면 channelDown이라는
문장이 실행된다
channel--;
변수 채널의 값을 1 감소시키는 것
그러면 1 감소하니까 7 => 6으로 감소됨
출력을 해보면
리모컨 t 가 가리키는
객체의 변수 channel 값은
아까 값이 6으로 감소됐으니까
6으로 출력됨
t1.channel = 7;
=> 리모컨 t1이 가리키는
객체의 채널을 의미
t1이 가르키는 객체의 채널을
0에서 => 7로 바꿈
t1이 가르키는 객체의 채널을
0에서 => 7로 바꿈
이걸 출력하면
참조변수 t1이 가리키는
객체의 채널은 7
참조변수 t2이 가리키는
객체의 채널은 0
결론
: 객체마다 별도의 저장공간이 있음
만약 t2=t1;
이라는 문장을
넣으면 어떻게 될까?
t2=t1;
변수 t1의 값을
t2에 넣으라는 뜻
t2 값이 0x100번지로 바뀜
그러면 t2의 리모컨과
객체의 연결이
끊어지게 된다
t2 참조변수하고
t2 객체하고 관계가 없어지는 것
그리고 t2는 t1과 같은 주소를 가지니까,
t1과 연결됨
t2 객체는 더 이상 사용할 수 있는
리모컨이 없으므로
객체는 리모컨 없이 사용할 수 없으니
객체는 사용불가가 되고,
사용할 수 없는 객체를
GC(가비지콜렉터-청소부)가
메모리를 확인하고 있다가
사용할 수 없는 객체를 찾으면
메모리에서 제거함
이것 출력도 t2 또한 7이 된다
결론: 두 개 이상의 리모컨이
하나의 객체를 가리키는 것도 가능하다
(주소 값만 같으면!)
t1과 t2 두개의 참조변수로
하나의 객체를 가르키는 게 가능
(주소가 같음)
하나의 참조변수로
두 개의 객체를 가르키는 건 불가능하다
변수: 하나의 값만 저장 가능
메인 메서드가 있는
class 이름이랑 소스파일 이름은
일치해야 함
아래의 class 이름
따라가는거 X
<리모컨과 객체생성>
주소를 100번지로 가정한다면,
100번지가 대입연산자에 의해서
참조변수 t 에 들어감
그리고 연결한 다음에 참조변수를 이용해서 객체를 사용
객체를 사용한다는 것은
객체가 가진 멤버를
사용한다는 것이고,
멤버는 변수하고 메서드 사용을 의미
t.channel = 7 - 변수사용
t.channelDown(); - 메서드 사용
channel에 7을 넣었으니
7로 바뀜
아래의 channelDown을 호출하면,
channelDown 메서드가
1 감소하는 것.
(--channel;)
그러면 값이 7에서 1 감소했으니
6으로 바뀜
마지막 내용을 출력하면
t가 가리키는
객체의 channel은 6이니까
이렇게 뜬다
<Tv를 2개 만드는 예제>
처음에는 두 객체 모두
channel 기본 값이 0임
참조변수 t1이 가리키는
객체의 변수 channel에
7을 대입하면
0에서 7로 바뀜
처음에는 둘 다 0이었다가
t1만 7로 변경
객체마다 별도의 저장공간을
갖는다는 예제
참조변수 t1 -> t2에 저장하면
t2의 값이 0x200
-> 0x100으로 변경된다
원래 가리키던 객체와의 연결이 끊어지고
t1이 가리키는 객체하고 연결됨
그러면 둘다 7이 출력된다
끊어진 객체의 값은 그대로지만
t2가르키는 객체가 달라져서
7이 출력되는 것
(끊어진 객체는 사용불가)
'> 프로그래밍 언어 > JAVA' 카테고리의 다른 글
[ch11-1~2] 컬렉션프레임워크와 핵심 인터페이스 (0) | 2023.01.19 |
---|---|
[ch6-11] 선언 위치 변수 종류 (0) | 2023.01.17 |
[ch6-9,10] 클래스의 정의 (0) | 2023.01.17 |
[ch6-8] 객체 배열 (0) | 2023.01.17 |
[ch6-5] 한 파일 여러 class 작성하기 (0) | 2023.01.14 |