this(), this
- 생성자의 이름으로 클래스이름 대신 this를 사용한다.
- 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.
class Car {
String color;
String gearType;
int door;
Car(){
this("white", "auto", 4); // Car(String color, String gearType, int door)를 호출
}
Car(String color){
this(color, "auto", 4);
}
Car(String color, String gearType, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
}
public class CarTest2 {
public static void main(String[] args) {
Car c1 = new Car();
Car c2 = new Car("blue");
System.out.println("c1의 color= " + c1.color + ", gearType= " + c1.gearType + ", door = " + c1.door );
System.out.println("c2의 color= " + c2.color + ", gearType= " + c2.gearType + ", door = " + c2.door );
}
}
this.color는 인스턴스변수이고, color는 생성자의 매개변수로 정의된 지역변수로 서로 구별이 가능하다.
이처럼 생성자의 매개변수로 인스턴스변수들의 초기값을 제공받는 경우가 많기 때문에
매개변수와 인스턴스변수의 이름이 일치하는 경우가 자주 있다.
이때는 매개변수이름을 다르게 하는 것 보다 'this'를 사용해서 구별되도록 하는 것이
의미가 더 명확하고 이해하기 쉽다.
'this'는 참조변수로 인스턴스 자신을 가리킨다.
참조변수를 통해 인스턴스의 멤버에 접근할 수 있는 것처럼,
'this'로 인스턴스변수에 접근할 수 있는 것이다.
하지만, 'this'를 사용할 수 있는 것은 인스턴스멤버뿐이다.
static메서드(클래스 메서드)에서는 인스턴스 멤버들을 사용할 수 없는 것처럼, 'this' 역시 사용할 수 없다.
왜냐하면, static 메서드는 인스턴스를 생성하지 않고도 호출될 수 있으므로
static메서드가 호출된 시점에 인스턴스가 존재하지 않을 수도 있기 때문이다.
댓글