반응형
이번 글에서는 자바의 인스턴스 멤버 클래스 내부에서 this와 외부 클래스 참조를 어떻게 구분하고 사용하는지를 배웁니다.
내부 클래스와 외부 클래스에 같은 이름의 필드나 메서드가 존재할 때,
어떤 것이 호출되는지 명확히 구분하는 방법을 학습합니다.
📦 외부 클래스 (A.java)
package ch09.sec05.exam02;
public class A {
String field = "A-field";
void method() {
System.out.println("A-method");
}
class B {
String field = "B-field";
void method() {
System.out.println("B-method");
}
void print() {
System.out.println(this.field); // 내부 클래스 B의 field
this.method(); // 내부 클래스 B의 method()
System.out.println(A.this.field); // 외부 클래스 A의 field
A.this.method(); // 외부 클래스 A의 method()
}
}
void useB() {
B b = new B();
b.print();
}
}
📌 실행 클래스 (AExample.java)
package ch09.sec05.exam02;
public class AExample {
public static void main(String[] args) {
A a = new A();
a.useB();
}
}
💻 실행 결과
B-field
B-method
A-field
A-method
💬 코드 설명
- this.field, this.method()
→ 내부 클래스 B의 멤버를 참조 - A.this.field, A.this.method()
→ 외부 클래스 A의 멤버를 참조
✔ 내부 클래스가 외부 클래스 인스턴스와 연결되어 있기 때문에
A.this를 통해 외부 클래스의 멤버에 접근 가능!
📌 간단 정리
참조 표현 | 실제 대상 |
this.field | 클래스 B의 필드 |
A.this.field | 클래스 A의 필드 |
this.method() | 클래스 B의 메서드 |
A.this.method() | 클래스 A의 메서드 |
💡 포인트 정리
- 내부 클래스는 외부 클래스의 인스턴스를 포함한 객체처럼 동작
- 내부 클래스와 외부 클래스에 동일한 이름의 필드/메서드가 있을 때는 this, A.this로 구분
- 외부 클래스 이름을 명시한 A.this는 외부 인스턴스를 직접 참조하는 문법
- 내부 클래스는 외부 인스턴스와 연결되어야 생성 가능
📌 정리하자면,
내부 클래스에서 외부 클래스와 이름이 같은 필드나 메서드가 충돌할 경우,
this와 A.this를 이용해 정확하게 참조할 수 있어야 합니다.
특히 복잡한 클래스 구조에서 매우 유용하게 쓰이는 개념입니다.
'프로그래밍 > JAVA' 카테고리의 다른 글
89. 익명 구현 객체 – 한 번만 쓰고 버리는 1회용 클래스 만들기 (0) | 2025.05.12 |
---|---|
[ 간단 정리 88+ ] 익명 객체 vs 람다식 vs 내부 클래스 ㅡ 차이점 비교!! (0) | 2025.05.12 |
88. 이벤트 처리를 위한 로컬 클래스 구현 – 콜백 메커니즘 만들기 (0) | 2025.05.12 |
86. 인스턴스 멤버 클래스 vs 정적 멤버 클래스 – 접근 가능한 멤버는? (0) | 2025.05.12 |
85. 로컬 클래스(Local Class) – 메서드 안에 클래스가?! (0) | 2025.05.12 |
84. 정적 멤버 클래스의 활용 – 인스턴스와 static 멤버를 모두 가진 클래스 (0) | 2025.05.12 |