[자바 프로그래밍] 자바 this를 파헤쳐보자
자바에서 제공하는 this 키워드는 인스턴스 자기 자신를 가리키는 키워드입니다. 이 this 키워드를 통해 클래스 메서드 및 생성자에서 자기 자신의 데이터를 업데이트하거나 조작할 수 있습니다.
여기서 중요한 것은 this 키워드는 이 클래스를 기반으로 생성된 인스턴스를 가리키는 참조라는 사실입니다. 인스턴스를 가르키는 참조와 인스턴스 자체는 다르다는 것을 알아두셨으면 좋겠습니다.
public class ThisExample {
private String name;
private Integer age;
private String address;
public ThisExample() {
this.name = "KBS";
this.age = 19;
this.address = "Seoul";
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public String getAddress() {
return address;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setAddress(String address) {
this.address = address;
}
public ThisExample returnThisExample() {
return this;
}
}
위의 예제는 this 키워드를 이용하여 작성한 전형적인 클래스 코드입니다. this란 키워드를 통해 생성자 및 세터 메서드에서 이 클래스를 기반으로 생성된 인스턴스의 필드 데이터에 접근할 수 있습니다.
this 키워드는 인스턴스 자기 자신을 가르키는 참조이기 때문에 인스턴스를 참조하는 변수와 비교했을 때 같다라는 결과가 나올 것입니다. 이것을 위의 returnThisExample 메서드를 이용하여 확인해보겠습니다.
public class Main {
public static void main(String[] args) {
ThisExample thisExample = new ThisExample();
System.out.println(thisExample);
System.out.println(thisExample.returnThisExample());
if(thisExample == thisExample.returnThisExample()){
System.out.println("Same!!");
}
else {
System.out.println("Not Same!!");
}
}
}
위에서 thisExample 변수는 ThisExample 클래스를 기반으로 생성된 인스턴스를 가르키는 변수입니다. 여기서 thisExample.returnThisExample 메서드를 호출하여 그 결과를 출력하면 같은 인스턴스를 가리키는 것을 알 수 있습니다.
thisExample과 this 키워드를 반환하는 returnThisExample의 값이 같기 때문에 Same!!이라는 결과가 아래에 출력됩니다.
ThisExample@1540e19d
ThisExample@1540e19d
Same!!
'JAVA > Java' 카테고리의 다른 글
자료 구조 List, Set, Map의 차이 / Set과 Map 비교 (0) | 2021.10.06 |
---|---|
java, optional의 orElse와 orElseGet의 차이 (0) | 2021.05.24 |
JAVA GC (Garbage Collector) (0) | 2021.04.11 |
자바에서 final에 대한 이해 (0) | 2021.04.07 |
[Java] Java Optional (자바 옵셔널) 정리, 예제모음 (0) | 2021.03.29 |
[Java] Java 클래스 로딩 과정(Java Class Loading Process) (0) | 2021.03.29 |
Enum 찾기의 달인 (효율적으로 찾기, spring bean과 맵핑) (0) | 2021.03.21 |
lambda (람다, 표현식, 함수형 인터페이스, default 메소드, 메소드 레퍼런스) (0) | 2021.03.21 |