✅ this 키워드 의미
자바에서 this 키워드는 현재 객체를 가리키는 참조 변수입니다.
= this 키워드는 자기 자신을 가리킴.
= 인스턴스가 자기 자신의 주소를 반환하는 경우 사용
여기서 "현재 객체"란 현재 메서드가 호출되고 있는 객체를 의미합니다. 클래스의 인스턴스가 생성될 때마다 각 인스턴스는 고유한 메모리 공간을 가지며, 이를 객체라고 합니다. 따라서 메서드가 호출될 때마다 해당 메서드가 속한 객체를 지칭할 수 있어야 합니다.
✅ this 키워드의 쓰임
- 인스턴스 변수와 로컬 변수 구분: 메서드 내에서 인스턴스 변수와 로컬 변수의 이름이 충돌할 때, this를 사용하여 인스턴스 변수에 접근할 수 있습니다. 이를 통해 명확하게 변수의 범위를 구분할 수 있습니다.
- 다른 생성자 호출: 하나의 생성자에서 다른 생성자를 호출할 때 사용됩니다. 이것은 생성자 간 코드의 중복을 방지하고 생성자 오버로딩에 유용합니다.
- 인스턴스 메서드 내에서 현재 객체 참조: 인스턴스 메서드에서 현재 객체를 참조할 때 사용됩니다. 이를 통해 메서드 내에서 해당 객체의 다른 메서드나 변수에 접근할 수 있습니다.
- 익명 클래스에서 바깥 클래스의 인스턴스 참조: 익명 클래스 내에서 외부 클래스의 인스턴스를 참조할 때 this를 사용할 수 있습니다. 이는 외부 클래스의 인스턴스를 사용해야 하는 경우에 특히 유용합니다.
- 인스턴스 생성: this를 사용하여 현재 객체의 참조를 반환하는 인스턴스 생성 메서드를 작성할 수 있습니다.
✅ 사용 예시
1. 인스턴스 변수와 로컬 변수의 이름이 같을 때: 메서드나 생성자 내에서 인스턴스 변수와 로컬 변수의 이름이 같은 경우, 이를 구분하기 위해 this 키워드를 사용할 수 있습니다.
public class MyClass {
private int x;
public void setX(int x) {
this.x = x; // "this.x"는 인스턴스 변수를 가리킴
}
}
2. 다른 생성자를 호출할 때: 하나의 생성자에서 다른 생성자를 호출할 때, 생성자 호출문은 클래스의 첫 줄에 위치해야 합니다. 이 때 this()를 사용하여 다른 생성자를 호출할 수 있습니다.
public class MyClass {
private int x;
private int y;
public MyClass() {
this(0, 0); // 다른 생성자를 호출함
}
public MyClass(int x, int y) {
this.x = x;
this.y = y;
}
}
3. 인스턴스 메서드 내에서 현재 객체를 참조할 때: 인스턴스 메서드 내에서 현재 객체를 참조할 때 this를 사용할 수 있습니다.
public class MyClass {
private int x;
public void setX(int x) {
this.x = x;
}
public void printX() {
System.out.println("x의 값은 " + this.x + "입니다.");
}
}
this는 현재 객체를 가리키므로, 인스턴스 메서드 내에서 메서드를 호출할 때 this를 명시적으로 사용하지 않아도 됩니다. 하지만 가독성을 높이기 위해 this를 사용하는 것이 좋습니다.
public class MyClass {
private int x;
// 생성자
public MyClass(int x) {
this.x = x; // "this.x"는 현재 객체의 x 변수를 가리킴
}
// 메서드: 현재 객체의 x 값을 반환
public int getX() {
return this.x; // "this.x"는 현재 객체의 x 변수를 가리킴
}
// 메서드: 다른 메서드를 호출하여 현재 객체의 x 값을 출력
public void printX() {
System.out.println("현재 객체의 x 값은 " + this.getX() + "입니다.");
// "this.getX()"는 현재 객체의 getX() 메서드를 호출
}
// 메서드: 현재 객체를 반환
public MyClass getThis() {
return this; // 현재 객체를 반환
}
public static void main(String[] args) {
MyClass obj1 = new MyClass(5);
MyClass obj2 = new MyClass(10);
System.out.println("obj1의 x 값: " + obj1.getX());
obj1.printX();
System.out.println("obj2의 x 값: " + obj2.getX());
obj2.printX();
MyClass obj3 = obj1.getThis(); // obj1의 참조를 반환
System.out.println("obj3의 x 값: " + obj3.getX());
// obj3는 obj1과 같은 객체를 참조하므로 obj1과 동일한 x 값을 가짐
}
}
이 코드에서 this.x는 현재 객체의 인스턴스 변수 x를 가리키고, this.getX()는 현재 객체의 getX() 메서드를 호출합니다. 또한 this를 사용하여 getThis() 메서드에서 현재 객체를 반환합니다. 이렇게 함으로써 this 키워드가 현재 객체를 가리키는 것을 보여줄 수 있습니다.
'Java' 카테고리의 다른 글
| (자바) 뮤직플레이어 프로그램 만들기(MVC패턴 적용) (0) | 2024.04.19 |
|---|---|
| (자바) 뮤직플레이어 프로그램 만들기(MVC패턴 적용 안한 상태) (1) | 2024.04.19 |
| 코딩에서의 스코프(Scope)란? (feat. 자바) (1) | 2024.04.19 |
| [자바] 예시로 쉽게 이해하는 swtich-case문과 병합처리 (2) | 2024.03.29 |
| [자바] 예시를 통해 쉽게 이해하는 이스케이프 시퀀스(Escape sequence)와 텍스트 블록(""") (3) | 2024.03.29 |