class Pen {
int size;
String color;
Pen(String color, int size) {
this.color = color;
this.size = size;
}
위 코드에서 생성자의 매개변수 이름은 color, size 이다.
문제는 저 생성자 블록 { } 안에서 매개변수의 이름과 인스턴스의 변수 이름이 겹치는 것이다.
이때 사용해주면 좋은 것이 참조변수 this 이다.
this는 인스턴스의 변수를 뜻한다.
this.color = 인스턴스 변수
color = 생성자의 매개변수로 정의된 지역변수
물론 매개변수 내의 이름을 바꾸는 방법도 있지만 위와 같이 this를 사용하여 구별되도록 하는 것이 의미가 더 명확해진다.
하지만 this는 인스턴스 변수에서만 사용이 가능하다.
static 메서드에서 인스턴스 멤버들을 사용할 수 없는데 그 이유는 호출된 시점에서 인스턴스가 생성되지 않았을 수도 있기 때문이다.
같은 이유로 static 메서드에서는 this를 사용할 수 없다.