본문 바로가기

Java

this는 왜 사용할까?

목차

  • 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