본문 바로가기
back-end/JAVA

18) 객체지향-생성자 this(), 참조변수 this

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

18-1) 생성자 this()

-생성자에서 다른 생성자 호출할 때 사용

생성자 this()

 

Car()의 생성자가 3개 있습니다. 

1, 2 생성자가 3번째 생성자를 호출한 것입니다.

원래의 형태는 Car("white",auto",4)가 맞는데, Car를 쓰지 않고 this로 씁니다.

그냥 규칙입니다. 외우세요.

this생성자의 실제 의미는 Car(String color, String gearType, int door)를 호출하라는 소리입니다.

 

 

 

18-2) 생성자 호출 시 주의사항

-다른 생성자 호출시 첫 줄에서만 사용 가능

Car(String color){

     door = 5; 

     Car(color, "auto",4); //에러!

}

생성자끼리 호출할 땐 반드시 첫 번째 줄에서만 호출 가능합니다.

위에 또 다른 에러가 있죠? 다른 생성자 호출 시 this로 호출해야 합니다.

 

 

 

18-3) 생성자 this()를 쓰는 이유

위 세 개의 this생성자는 왜 쓸까요?

코드의 중복을 제거하기 위해 씁니다. 

세 개의 this생성자는 하는 일도 비슷하기 때문에 서로 호출할 일이 많아요.

같은 작업을 여러 번 작성하는 것보다 서로서로 호출하면 편리하겠죠.

코드의 중복을 제거하지 않은 코드

 

위 코드에서 코드의 중복이 보입니다. 어디일까요?

굳이 첫 번째 생성자 Car()를 저렇게 써야 할까요?

바꿔보겠습니다.

1번째 생성자 Car()를 바꾼 코드

 

코드의 중복은 반드시 제거되어야 합니다.

 

 

18-4) 참조 변수 this

-인스턴스 자신을 가리키는 참조 변수

-인스턴스 메서드(생성자 포함)에서 사용 가능

-지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용

 

this() 생성자와 참조 변수 this는 전혀 다릅니다. 연관 지으시면 안 돼요.

참조변수 this의 특징

 

좌측 코드는 원래 this.color, this.gearType, this.door가 맞는데 생략을 해준 겁니다. 

같은 클래스 안에서는 생략이 가능하기 때문입니다..

우측 코드에서는 lv와 iv의 이름은 같습니다.

만약 iv가 this 없이 썼다면 우측에 있는 모든 변수는 lv가 됐겠죠.

참조 변수this는 lv와 iv를 구별하기 위해 사용합니다.

 

 

18-5) 참조변수 this와 생성자 this() 최종 정리

this: 인스턴스 자신을 가리키는 참조 변수, 인스턴스의 주소가 저장되어 있다.

                  모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다.

this(), this(매개변수): 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.

 

두 개를 절대 연관 짓지 마세요. 완전 다른 것입니다.

참조변수this와 생성자this()

 

이름이 같아서 iv와 lv를 구별하기 위해 참조 변수 this를 쓰는 것이고,

static메서드에선 iv가 사용불가니까 참조 변수 this도 사용불가입니다.

 

 

 

 

*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*

728x90
반응형