목차
- this
this는 왜 사용할까?
1. this란
this는 인스턴스 자신을 가리키는 참조변수이다.
public Item getThis() {
return this;
}
Item itemA = new Item("itemA", 1000);
System.out.println(itemA.getThis() == itemA);
OUTPUT
true
this는 인스턴스 메서드, 생성자에서 사용 가능하다. 반면 정적 메소드에서는 사용할 수 없다.
public class Item {
private String name;
private Integer price;
public Item(String n, Integer p) {
this.name = n;
this.price = p;
}
public void setName(String n) {
this.name = n;
}
그런데 사실 this는 인스턴스 메서드 내에 지역변수로 숨겨진 채로 존재한다. 그래서 this를 생략해도 정상적으로 작동한다.
public class Item {
private String name;
private Integer price;
public Item(String n, Integer p) {
name = n;
price = p;
}
public void setName(String n) {
name = n;
}
2. this는 생략이 가능한데 왜 사용할까?
this는 인스턴스 메서드의 매개변수와의 구분을 위해 사용한다.
아래의 setName 메서드의 경우
매개 변수이자 지역변수인 name 과
인스턴스 필드 name을 구분할 수 없다.
그래서 실제로 이 코드를 통해 setName을 실행하면 아무런 변화가 없다. 생성자의 경우도 마찬가지다.
public class Item {
private String name;
private Integer price;
public Item(String name, Integer price) {
name = name;
price = price;
}
public void setName(String name) {
name = name;
}
그렇기 때문에 이 경우에 한해서 this를 작성해야 한다.
그러면 누군가는 this를 생략하기 위해서 매개변수를 필드 이름과 다르게 작성하겠지만 이로 인해 얻는 효과보다
매개변수명을 명확하게 작성해서 얻을 수 있는 이점이 크기 때문에 this를 작성하는 것이라고 생각한다.
this가 있는게 인스턴스의 무언가를 의미한다고 명확하게 알아볼 수 있기 때문에 장점이 많다고 생각한다.
reference
[자바의 정석 - 기초편] ch6-36,37 생성자 this(), 참조변수 this - 남궁성 youtube
'Java' 카테고리의 다른 글
애노테이션이란? (0) | 2022.07.17 |
---|---|
기본형과 참조형 그리고 래퍼클래스 (0) | 2022.07.17 |
Comparator - Compare() 궁금증 정리 (0) | 2022.07.14 |
쓰레드 - 2. 동기화 (0) | 2022.07.03 |
쓰레드 - 1. 쓰레드란? (0) | 2022.07.03 |