JAVA · 객체지향
내부 클래스 4종류
멤버 클래스, 정적 중첩 클래스, 지역 클래스, 익명 클래스의 차이를 비교합니다.
객체지향중급inner-class중첩클래스익명클래스static-nested
핵심 설명
멤버 클래스, 정적 중첩 클래스, 지역 클래스, 익명 클래스의 차이를 비교합니다.
Java code
public class OuterClass {
private int field = 10;
// 1. 멤버 내부 클래스 (non-static)
class Inner {
void show() {
System.out.println("외부 필드: " + field); // 외부 접근 가능
}
}
// 2. 정적 중첩 클래스 (static)
static class StaticNested {
void show() {
// field 접근 불가 (인스턴스 없음)
System.out.println("정적 중첩 클래스");
}
}
void method() {
// 3. 지역 클래스
class Local {
void show() {
System.out.println("지역 클래스, field=" + field);
}
}
new Local().show();
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
// 멤버 내부 클래스 생성
Inner inner = outer.new Inner();
inner.show();
// 정적 중첩 클래스 생성 (외부 인스턴스 불필요)
StaticNested nested = new StaticNested();
nested.show();
// 4. 익명 클래스
Runnable r = new Runnable() {
@Override public void run() {
System.out.println("익명 클래스");
}
};
r.run();
}
}학습 팁
대부분의 경우 정적 중첩 클래스가 적합합니다. 외부 인스턴스 참조를 유지하지 않아 메모리 누수 위험이 없습니다.
주의할 점
멤버 내부 클래스는 암묵적으로 외부 인스턴스 참조를 가집니다. 직렬화하면 외부 객체까지 직렬화되어 문제가 발생합니다.
자주 묻는 질문
내부 클래스 4종류란 무엇인가요?
멤버 클래스, 정적 중첩 클래스, 지역 클래스, 익명 클래스의 차이를 비교합니다.
내부 클래스 4종류 학습 시 주의할 점은 무엇인가요?
멤버 내부 클래스는 암묵적으로 외부 인스턴스 참조를 가집니다. 직렬화하면 외부 객체까지 직렬화되어 문제가 발생합니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.