본문 바로가기
back-end/JAVA

4)객체지향-객체의 생성과 사용

by 모두의 향연 2021. 5. 11.
728x90
반응형

4)객체지향-객체의 생성과 사용

 

4-1) 객체의 생성

클래스명  참조변수명; // 클래스의 객체를 참조하기 위한 참조 변수를 선언

참조 변수명 = new  클래스명(); // 클래스의 객체를 생성 후, 객체의 주소를 참조 변수에 저장

 

여기서 참조변수리모컨 

Tv를 다루기 위해서 꼭 리모컨이 필요하듯이, 자바에서도 객체를 다루기 위해서 꼭! 리모컨이 필요하다. 그게 참조변수.

리모컨=참조변수

①Tv  t; // Tv클래스 타입의 ①참조 변수 t를 선언

③t  =  ②new  Tv(); // Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장

=이 두줄을 한 문장으로 연결하면 Tv t = new Tv(); 이다.

 

 

4-2) 객체의 사용(=변수와 메서드 사용)

t.channel = 7; // (변수사용) Tv인스턴스의 멤버 변수 채널의 값을 7로 한다.

t.channelDown(); //(메서드 사용) Tv인스턴스의 메서드 channelDown()을 호출한다.

System.out.println("현재 채널은 " + t.channel + "입니다.");

 

지금까지 정리해보자면, 객체를 만들기 위해선 먼저 1. 클래스(설계도)부터 작성해야 하고

클래스를 보고 2. 객체(제품)를 생성하고 다음으로 3. 객체를 사용(변수, 메서드 사용)해야 합니다.

객체를 어떻게 사용해요? 리모컨을 통해서 접근해야겠죠?

실제로 우리 Tv 어떻게 사용해요? 리모컨으로 작동하잖아요?

 

 

자세히 다시 살펴볼게요.

 

① 클래스(설계도) 작성

②객체 생성

Tv t; 에서 Tv는 타입이 어떤가요? 기본형은 아니죠? 그럼 참조형이겠죠.

그럼 타입이 Tv인 리모컨 t를 선언하는 그림을 그려볼게요.

 

Tv t;
t = new Tv();

③객체 사용

t.channel = 7; //채널 값 0에서 7로 바꿔줌

t.channelDown(); //channelDown메서드 호출. 그러면 채널이 하나 줄어서 6으로 바뀜

System.out.println("현재 채널은 " + t.channel + "입니다."); //그럼 화면에 "현재 채널은 6입니다."라고 뜸

 

 

4-3) 객체를 2개 만들 때

Tv t1 = new Tv(); //티브이1

Tv t2 = new Tv(); //티브이2

t1.channel = 7; //티브이 1의 채널값이 0에서 7로 변경

System.out.println("t1의 channel값은 " + t1.channel + "입니다."); //7이 출력됨.

System.out.println("t2의 channel값은 " + t2.channel + "입니다."); //0이 출력됨.

그림에서 t1과 t2의 각각 변수와 메서드는 이름만 같고 전혀 다른 변수와 메서드입니다!!

두 개의 객체 생성

근데 만약 코드가 이렇게 바뀐다면 그림이 달라집니다.

 

Tv t1 = new Tv(); //티비1

Tv t2 = new Tv(); //티브이 2

t2 = t1; //t1의 주솟값을 t2에 저장

t1.channel = 7; //티브이 1의 채널 값이 0에서 7로 변경

System.out.println("t1의 channel값은 " + t1.channel + "입니다."); //7이 출력됨.

System.out.println("t2의 channel값은 " + t2.channel + "입니다."); //7이 출력됨.

t2 = t1;

t1의 주솟값 0x100을 t2의 주솟값으로 저장하게 됩니다.

그럼 t2의 주솟값이 0x100으로 바뀌게 되면서 t1의 주솟값으로 향하게 됩니다.

t2의 객체는 더 이상 쓸모가 없게 되고 가비지 컬렉터에 의해 없어지게 됩니다.

불필요하게 메모리가 낭비되는 것을 방지하기 위함이죠. 

t2.channel을 입력하면 t2의 주솟값인 0x100으로, 주솟값 0x100의 메모리에서 변수 channel의 값은 7이니까 7이 출력됩니다.

 

6-4. 객체와 참조 변수의 개수 관계

(a) 하나의 인스턴스를 여러 개의 참조 변수가 가리키는 경우(가능)=하나의 티브이를 여러 개의 리모컨으로 조정 가능

(b) 여러 인스턴스를 하나의 참조 변수가 가리키는 경우(불가능)= 여러 개의 티브이를 하나의 리모컨으로 조정 불가능하죠

 

*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 되구요! 저는 개인적으로 공부하는 게 목적입니다*

728x90
반응형