정의
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는 매개변수를 뜻하여 매개변수를 통해 멤버변수를 접근할 수 있게 된다.
다음은 코드를 실행하여 직접 오류가 발생하는 지 확인하는 과정이다.
하지만 다음 코드로 수정하면
public Circle getMe() { return this; } 를 객체 b가 호출하게 되면서 b 또한 a가 가지고 있던 멤버변수를 참조하게 된다.
public Circle() { this(1," "); } 코드에서 볼 수 있듯이 생성자가 다른 생성자를 호출할 수 있다.
결론 : 1. this는 객체 자신을 가리키는 예약어이다.
2. 주로 매개 변수와 멤버 변수의 이름이 같을 때 사용한다.
3. this 는 생성자가 다른 생성자를 호출할 때 사용할 수 있다.
주의점 : 1. this()는 반드시 생성자 코드에서만 호출할 수 있다.
2. this()는 반드시 생성자의 첫 번째 문장이 되어야한다.
3. this()는 반드시 같은 클래스 내에서 다른 생성자를 호출할 때 사용된다.