🎃 생성자 간 호출 가능한 조건
<에러발생 예>
Car(String color) {
door = 5; //첫번째 줄
Car(color, "auto", 4); //에러1. 생성자의 두 번째 줄에서 다른 생성자 호출
} //에러2. this(color, "auto", 4);로 해야함
- 생성자 Car2()에서 또 다른 생성자 Car2(String color, String gearType, int door)를 호출함
- 생성자간의 호출에는 생성자의 이름 대신 this를 사용해야만 하므로 'Car2' 대신 'this'를 사용
- 생성자 Car2()의 첫째 줄에서 호출하였다는 점을 유의
Car2() {
color = "white";
gearType = "auto"
door = 4;
}
<↓ 간략히>
Car2() {
this("white", "auto", 4);
}
:아래 코드는 생성자 Car2(String color, String geartype, int door)를 활용해서 더 간략히 한 것
Car2 c1 = new Car2();와 같이 생성자 Car2()를 사용해서 Car2인스턴스를 생성한 경우에,
인스턴스변수 color는 "white", gearType은 "auto", door는 4로 초기화 되도록 함
🔔 주의
this
: 인스턴스 자신을 가리키는 참조변수
-인스턴스의 주소가 저장되어 있음
-모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재
this( ) , this(매개변수)
: 생성자
-같은 클래스의 다른 생성자를 호출할 때 사용
this
와 this( )
는 완전히 다른 것
Car(String c, String g, ind d) {
color = c;
gearType = g;
door = d;
}
color = c;
는 생성자의 매개변수로 선언된 지역변수 c의 값을 인스턴스변수 color에 저장함Car(String color, String gearType, int door) {
this.color = color;
this.gearType = gearType;
this.door = door;
}
생성자의 매개변수로 선언된 변수의 이름이 color로 인스턴스 변수 color와 같을 경우에 인스턴스 변수 앞에 this
를 사용
this.color는 인스턴스 변수이고, color는 생성자의 매개변수로 정의된 지역변수로 서로 구별 가능
this.color = color; 대신에 color = color로 쓰면 둘 다 지역변수로 간주
생성자의 매개변수로 인스턴스변수들의 초기값을 제공받는 경우가 많기 때문에 매개변수이름을 인스턴스변수의 이름과 다르게 하는 것보다 this
를 사용해서 구별되도록 하는 것이 좋음
this
는 참조변수로 인스턴스 자신을 가리킴
참조변수를 통해 인스턴스 멤버에 접근할 수 있는 것처럼 this
로 인스턴스변수에 접근할 수 있음
하지만, this
를 사용할 수 있는 것은 인스턴스멤버 뿐