JAVA this와 this()의 차이점

자바에는 thisthis() 키워드가 있는데 이 키워드는 전혀 다른 키워드이다.

짧게 설명하자면 this는 인스턴스 자신을 가르키는 참조 변수이고 this()는 생성자를 뜻한다.

this

1
2
3
4
5
6
7
8
9
10
11
class Car {
    String color; // 인스턴스 변수
    String gearType;
    int door; 
    
    Car(String color, String gearType, int door){
        this.color = color; 
        this.gearType = gearType;
        this.door = door;
    }
}

this 는 위 코드처럼 생성자의 매개변수로 선언된 변수의 이름이 인스턴스 변수와 같을 때 인스턴스 변수와 지역변수를 구분하기 위해서 사용한다.

Car() 생성자 안에서의 this.color는 인스턴스 변수이고, color는 매개변수로 정의된 지역변수이다.

static 메서드에서는 this를 사용하지 못한다.

this()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
    }
}

this()는 같은 클래스의 다른 생성자를 호출할 때 사용한다. 위 코드의 Car() 생성자와 Car(String color) 생성자는 this()를 통해 모두 Car(String color, String gearType, int door) 생성자를 호출하고 있는 것이다.

refer

자바의 정석 1