공부 기록장 2023. 7. 4. 17:35

정의

this 는 현재 객체 자신에 대한 레퍼런스이다.

 

코드를 통해 알아보자면

public class Circle{
	int radius;
    String name;
    
    public Circle()
    {
        radius = 1;
        name = "";
    }
    public Circle(int r, String n)
    {
    	this.radius = r;
        this.name = n;
    }
}

다음 코드에서 this.radius = r; 부분과 this.name = n; 부분에서 사용된 것을 알 수 있는데

보통 이런 경우에는 radius = r;  과 name = n; 으로 사용해도 무방하다.

 

하지만 public Circle(int r, String n) 부분에서 매개변수(int r, String n)은 코드를 읽는 사람에게는 어떤 용도로 사용되는 지 모를 수 있기에 public Circle(int radius, String name) 으로 변경하는 것이 좋다고 한다.

 

 

 

그렇게 수정한 일부 코드를 보면 다음과 같다.

 public Circle(int radius, String name)
    {
    	radius = radius;
        name = name;
    }

→  하지만 이런 경우 2개의 radius는 매개변수인 radius에 접근하기 때문에 다음 코드로 수정해야 한다.

 

 

 public Circle(int radius, String name)
    {
    	this.radius = radius;
        this.name = name;
    }

→ 이렇게 수정하면 this.radius 는 객체의 멤버변수인 radius 를 뜻하게 되고 radius는 매개변수를 뜻하여 매개변수를 통해 멤버변수를 접근할 수 있게 된다.

 

 

 

 

다음은 코드를 실행하여 직접 오류가 발생하는 지 확인하는 과정이다.

다음 코드를 실행한 결과 객체에 radius = 3 과 name = "안녕" 이라는 값을 초기화하여 생성하려해도 제대로 값이 들어가지 않는 경우가 생긴다.

 

 

 

하지만 다음 코드로 수정하면 

radius 에 정확히  3  과  name에 "안녕" 이라는 값이 들어간 것을 알 수 있다.

 

 

 

다음 코드는 this 를 통해 객체를 반환하므로써 객체 b가 객체 a 의 값들을 갖게 되는 코드이다.

public Circle getMe() { return this; } 를 객체 b가 호출하게 되면서 b 또한 a가 가지고 있던 멤버변수를 참조하게 된다. 

 

 

 

this를 통해 생성자가 다른 생성자를 호출하는 코드이다.
public Circle() { this(1," "); } 코드에서 볼 수 있듯이 생성자가 다른 생성자를 호출할 수 있다.

 

 

 

 

결론 :  1. this는 객체 자신을 가리키는 예약어이다.

           2. 주로 매개 변수와 멤버 변수의 이름이 같을 때 사용한다.

           3. this 는 생성자가 다른 생성자를 호출할 때 사용할 수 있다. 

 

 

주의점 : 1. this()는 반드시 생성자 코드에서만 호출할 수 있다.

              2. this()는 반드시 생성자의 첫 번째 문장이 되어야한다. 

              3. this()는 반드시 같은 클래스 내에서 다른 생성자를 호출할 때 사용된다.