this란?
자바에서 this 는 인스턴스 자기 자신을 가리키는 키워드입니다.
this 를 통해 클래스 메소드 및 생성자에서 자기 자신의 데이터를 업데이트하거나 조작할 수 있습니다.
this 는 클래스를 기반으로 생성된 인스턴스를 가리키는 참조 라는 것입니다.
여기서 중요한 부분은 인스턴트를 가리키는 참조와 인스턴스 자체는 다르다는 점입니다.
this가 생성자에 사용될 때가 가장 많은 것 같아서 생성자에서 사용되는 예로 살펴보겠습니다.
예시를 통한 이해
1. 클래스의 속성과 생성자/메소드의 매개변수의 이름이 같은 경우
public class Fruit {
public String name;
public String color;
public double weight;
public int count;
public Fruit(String name, String color, double weight, int count) {
this.name = name;
this.color = color;
this.weight = weight;
this.count = count;
}
}
public class TestFruit {
public static void main(String[] args) {
Fruit fruit = new Fruit("banana", "yellow",5.0,10);
System.out.println(fruit.name + " " + fruit.color + " " + fruit.weight + " " + fruit.count);
}
}
Fruit 객체(인스턴스)의 name이 매개변수 name이 되어 객체의 속성 값을 할당해줍니다.
2. 클래스에 오버로딩된 다른 생성자 호출
public class Fruit {
public String name;
public String color;
public double weight;
public int count;
public Fruit(String name, String color) {
this(name, color, 0.0, 0);
}
public Fruit(String name, String color, double weight, int count) {
this.name = name;
this.color = color;
this.weight = weight;
this.count = count;
}
}
하나의 클래스에 여러개의 생성자가 오버로딩 되어 있을 때 일부분을 제외하고는 서로 중복된 코드를 가지고 있는 경우가 많이 있습니다.
이런 순간에 내부에 정의된 다른 생성자를 호출하여 코드의 중복을 피하고 깔끔한 소스를 작성할 수 있습니다.
같은 클래스에 오버로딩된 다른 생성자를 호출할 때에도 this 키워드가 사용됩니다.
위의 예시처럼 name 과 color 만 매개변수로 받았을 때, weight과 count 에는 default 값으로 0.0 과 0이 할당되게 하는 constructor를 만들어 놓은 것입니다.
3. 객체 자신의 참조값을 전달하고 싶을 때
public class Fruit {
public String name;
public String color;
public double weight;
public int count;
public Fruit(String name, String color, double weight, int count) {
this.name = name;
this.color = color;
this.weight = weight;
this.count = count;
}
public Fruit getFruitInstance() {
return this;
}
}
마지막 getFruitInstance 메소드를 보면 자기 자신을 return 값으로 보내주고 있습니다.
heap에 저장된 자신의 주소를 return 할 때에도 사용된다고 합니다.
소감
1,2 는 확실히 개발할 때 많이 사용될 것 같은데 3번 같은 경우는... 잘 사용할지 모르겠습니다. 하지만 알아놓으면 좋으니까 작성을 해봤습니다. javascript로 this를 배울 때는 뭔가 복잡하다고 생각했는데, heap메모리에 대하여 배우고 메모리의 주소 값이 stack에 저장된다고 생각하고 그것이 this라고 생각하니 그렇게 어렵다고 생각하지 않게 되었습니다.
출처
https://jaynamm.tistory.com/entry/JAVA-this-%EC%9D%98%EB%AF%B8%EC%99%80-%EC%82%AC%EC%9A%A9%EB%B2%95
'코딩 개발 > Java' 카테고리의 다른 글
Java - UML 다이어그램 (0) | 2023.04.05 |
---|---|
Java - Data Type (0) | 2023.04.05 |
Java - 캡슐화 (Encapsulation) (0) | 2023.04.03 |
Java - Heap & Stack 메모리 (feat. 예제를 통한 이해) (0) | 2023.04.02 |
Java - Cohesion & Coupling(응집도, 결합도) (0) | 2023.04.02 |