본문 바로가기
Java

[Java] this에 관해서

by bkuk 2022. 9. 28.

this 란?

생성된 인스턴스 스스로를 가르키는 예약어입니다.

아래 사진을 같이 보시겠습니다.

 

 

BirthDay 클래스를 통해 인스턴스를 생성 했습니다.

BirthDay 클래스의 생성자자료형이 문자열인 "name"인 매개변수입니다.

 

실행 클래스에서 생성자에 "Son"이라는 문자열을 넣었고,

초기화가 되었을거라고 생각되어, "name"을 호출해보겠습니다.

컴파일 오류가 발생하지 않았지만, 아무 내용도 출력되지 않았습니다.

 

이 상황에 대해서 자세히 알아보겠습니다. 

 

① 생성자에 "Son"이라는 인자 값을 통해 매개변수에 전달

② 생성자는 "Son" 이라는 문자열을 입력받음

 

③  "BirthDay" 클래스의 멤버 변수 "name" 을 "Son"으로 초기화 

 

④ 위에서 초기화된 인스턴의 name 값을 호출

 

 

 

하지만, 위에서 아무 내용도 출력되지 않은 걸 확인할 수 있었습니다.

컴파일러는 아래 그림처럼 가장 가깝게 위치한 변수 이름으로 접근합니다.

 

따라서 생성자의 매개변수에만 값이 할당되어 아무내용도 출력되지 않았습니다.

 

 

따라서, 이상황을 해결하기 위해서 생성자의 매개변수 이름을 "n"으로 변경해보겠습니다.

 

생성자의 매개변수 이름을 "n"으로 변경했습니다.

생성과 동시에 "Son"이라는 이름으로 초기화가 잘 진행된 것을 확인할 수 있습니다.

 

 

하지만 또다른 문제가 발생했습니다.

 

변수의 이름이 "n" 이다보니 "name"의 약자인지,  "number"의 약자인지

이 코드를 보는 사람은 이를 알수가 없습니다.

 

우리 개발자는 기계와의 소통도 중요하지만, 이 코드를 보는 사람과의 소통도 매우 중요합니다.

 

 

따라서, 이때 this라는 키워드를 사용할 수 있습니다.

this는 생성된 인스턴스 스스로를 가르키는 예약어입니다.

 

 


또, this라는 예약어는 다른 기능이 있습니다.

 

생성자에게 다른 생성자를 호출하는 this로도 사용 가능합니다.

클래스에 생성자가 여러 개 있을 때 어떤 생성자에서 다른 생성자를 호출하는 경우 사용합니다.

 

BirhDayData 클래스에는

BirhDayData의 default 생성자와 매개변수(String, int, int)를 가지는 생성자가 존재합니다.

 

클래스가 생성될 때 BirhDayData(String, int, int)가 호출되어 이름과 일(day)과 월(month)를 전달받고,

BirhDayData() default 생성자가 호출되는 경우에는 초깃값으로 "이름 없음", "0", "0" 을 할당할 수 있습니다.

 

생성자는 클래스가 생성될  때호출되므로,

클래스 생성이 완료되지 않은 시점에 오류가 있다면 오류가 발생할 수 있습니다.

댓글