그런데 작성하고 나니 아래 코드와 똑같은 코드를 반복한 것을 볼 수 있습니다(①과 ②가 서로 같은 코드죠?). 이런 경우 똑같은 코드를 두 번 반복하기보다는 다음과 같이 바꿔줄 수 있습니다.
public Car() {
// this.name = "이름없음";
// this.number = 0;
this("이름없음",0);
}
this 키워드는 자기 자신을 가리킨다고 했는데, this에 괄호를 붙이면 자기 자신의 생성자를 의미합니다. 자기 자신의 생성자에 ‘이름없음’과 ‘0’을 넣어서 호출하면 Car 객체에 기본 생성자를 호출했을 때 String 값과 int 값을 가진 생성자를 호출할 것입니다. 이 생성자의 name에는 이름없음이 들어와서 필드 name에 ‘이름없음’, number에는 0이 들어와서 필드 number에 ‘0’이라는 값을 초기화해줍니다. 즉, this("이름없음", 0)이라는 코드가 의미하는 것은 다음 코드를 호출하겠다는 의미입니다.
public Car(String name, int number) { this.name = name; this.number = number; }
생성자 Car()에서 this("이름없음",0);은 Car(String name, int number)를 호출하는 것이죠. 같은 의미로 생성자 Car(String name)에서 this.name = name; 코드 대신에 this(name,0);으로 바꿔준다면, Car(String name, int number)를 호출합니다. 만약 this(0);이 가능하려면 생성자 중 Car(int number)가 있어야 하겠죠.