middlefitting

[OOP] 생성자 this()와 참조 변수 this는 무엇일까 본문

카테고리 없음

[OOP] 생성자 this()와 참조 변수 this는 무엇일까

middlefitting 2023. 2. 15. 23:59

this() 와 this 의 차이

 

개인적으로 생성자 this()와 참조 변수 this는 상당히 낯선 친구들이었습니다.

 

둘의 차이는 완전히 다른 존재라는 것입니다. 비슷하게 생기긴 했지만 말이죠.

 

어떤 역할을 하는지 하나씩 알아보도록 하겠습니다.

 

 

 

생성자 this()

 

this()는 생성자에서 호출하는 다른 생성자를 말합니다.

 

생성자에서 다른 생성자를 호출하는 경우는 무엇이 있을까요.

 

다양한 이유가 있겠지만 결국 코드의 중복을 줄이기 위해 사용할 것입니다.

 

생성자는 오버로딩이 가능한데 생성자마다 인스턴스 변수를 초기화하는 과정이 겹칠 수 있으니 그러한 부분을 줄일 수 있다는 것입니다.

 

예를 들어 다음과 같은 경우 활용할 수 있을 것입니다.

 

public class Chair {
    String 	color;
    int 	weight;
    int 	height;
    
    public Chair() {
        this("black", 10, 100);
    }
    
    public Chair(String color) {
        this(color, 10, 100);
    }
    

    public Chair(String color, int weight, int height) {
        this.color = color;
        this.weight = weight;
        this.height = height;
    }
}

 

다만, 생성자 this()를 사용하실때 지켜야 하는 규칙이 있습니다.

 

그것은  this()는 생성자 첫 줄에서만 사용이 가능하다는 것입니다.

 

이 규칙을 지키지 않으면 에러를 보게 됩니다.

 

 

 

참조변수 this

 

참조변수 this는 인스턴스 자신을 가리킵니다.

 

위에 코드 중에 이런 부분이 존재합니다.

 

public Chair(String color, int weight, int height) {
    this.color = color;
    this.weight = weight;
    this.height = height;
}

this는 인스턴스의 참조변수입니다.

 

따라서 this.color는 인스턴스의 color 변수를 가리키게 됩니다.

 

왜 이렇게 인스턴스 변수에 접근하냐면 생성자로 넘어온 매개변수로 동일한 이름의 color 변수가 존재하기 때문입니다.

 

this 참조변수는 인스턴스의 변수를 지칭하기 위해 사용합니다.

 

해당과 같은 경우는 this를 붙이지 않으면 근처에 있는 color 변수를 가리키게 되어 가리키는 것이고,

 

겹치는 변수가 없다면 this를 통해 접근하지 않아도 알아서 인스턴스 변수를 가리키게 됩니다.

 

헷갈리는 경우 인스턴스 변수를 가리키고 싶을 때는 무조건 this를 붙이시면 됩니다.

 

this 키워드를 붙이는 것이 시각적으로 한눈에 들어오니 이점도 존재합니다.

 

 

 

결론은

 

this()는 생성자에서 다른 생성자를 호출할때,

 

this는 인스턴스의 참조변수 라고 이해하시면 될 것 같습니다.