Java 문법에서 this를 사용하는 경우 중 this. 뒤에 붙여 멤버 필드, 메서드, 생성자 등에 접근하는 경우 외에 this 자체를 사용하는 경우가 있다.
그 이유는 바로 해당 클래스의 참조값을 넘기기 위해서이다.
클래스 내부에서 this 자체로 쓰이는 경우, 아직 객체로 만들어지기 전에 참조값을 가질 수 있나 싶지만, 객체가 메모리를 할당 받는 순간에 그 객체 변수의 참조값을 의미하는 것이다.
return this;
메서드는 객체가 생성된 후에 호출 할 수 있기 때문에, 결국 메서드 내부에서 실행되는 이 코드는 해당 클래스를 통해 만들어진 객체의 참조값을 반환하는 것이다.
❓그렇다면, 객체가 생성되기도 전부터 사용 가능한 static 메서드에서 또한 사용이 가능할까
당연하게도 사용하지 못한다. 아직 생기지도 않은 참조값을 반환할 수는 없기 때문에..
Class Player {
Player setName(String name){
this.name = name;
return this;
}
// or
void setName(String name){
this.name = name;
}
}
위의 두 메서드는 결국 this.name = name; 을 통해 같은 동작을 수행하는데 아래 메서드와 같이 리턴값을 void로 선언하면 될 것을 왜 굳이 자기 자신의 참조값을 리턴시키도록 하는 이유가 뭘까
이유는 간단하다. 리턴값이 있기 때문.
해당 함수만 호출하고 끝나면 두 메서드에 차이는 없겠지만, 리턴값을 가지고 다른 행위를 더 수행하고 싶다면 첫번째 메서드를 사용하여야 한다.
예를 들어, 첫번째 메서드로는
player.setName().getName()
하면 되는 문제를 두번째 메서드로는
player.setName()
player.getName()
해야한다.