본문 바로가기
> 프로그래밍 언어/JAVA

[ch6-6, 7] 객체의 생성과 사용

by 자몽주스 2023. 1. 16.
728x90

객체를 다룰려면 

리모컨(참조변수)가 필요

리모컨을 만들어주고 

객체 만들어준 다음 

- 대입연산자로 리모컨과 객체 연결

Tv t;

t = new Tv();

||

Tv = 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이 출력되는 것

(끊어진 객체는 사용불가)

728x90