
(1)정적 중첩 클래스
: 정적 중첩 클래스는 외부 클래스의 인스턴스와 관계없이 독립적으로 존재할 수 있는 클래스. 정적 중첩 클래스는 외부 클래스의 정적 멤버에만 접근할 수 있으며, 외부 클래스의 인스턴스 멤버에는 접근할 수 없다. 주로 외부 클래스와 관련된 추가적인 기능을 제공할 때 유용하게 사용됨
(2)중첩 클래스의 접근
바깥 클래스.중첩클래스로 접근해야 한다.NestedOuter.Nested nested = new NestedOuter.Nested();
class OuterClass {
private static String staticOuterVar = "Outer Static Variable"; // 정적 멤버
private String instanceVar = "Outer Instance Variable"; // 인스턴스 멤버
// 정적 중첩 클래스
static class StaticNestedClass {
void display() {
System.out.println(staticOuterVAr); // 외부 클래스의 정적 멤버에 접근 가능
// System.out.println(instanceVar); // 오류 발생 : 외부 클래스의 인스턴스 멤버는 접근할 수 없음
}
}
public static void main(String[] args) {
// 정적 중첩 클래스는 외부 클래스의 인스턴스를 생성하지 않고 독립적으로 생성 가능
StaticNested[]Class nested = new StaticNestedClass();
nested.display(); // 출력 : Outer Static Variable
}
OuterClass에는 정적 멤버인 staticOuterVar와 인스턴스 멤버인 instanceVar가 있음StaticNestedClass는 정적 중첩 클래스로, OuterClass의 정적 멤버인 staticOuterVar에 접근 가능StaticNestedClass는 외부 크래스의 인스턴스 멤버인 instanceVar에는 접근할 수 없음. 주석 처리된 System.out.println(instanceVar)부분은 컴파일 오류 발생StaticNestedClass는 OuterClass의 인스턴스를 생성하지 않고 독립적으로 생성할 수 있음| 구분 | 비정적 내부 클래스 사용 | 정적 중첩 클래스 사용 |
|---|---|---|
| 외부 클래스 인스턴스 생성 여부 | 외부 클래스의 인스턴스를 생성해야 내부 클래스 생성 가능 | 외부 클래스 인스턴스 없이 독립적으로 생성 가능 |
| 메모리 효율성 | 외부 클래스의 인스턴스를 매번 생성해야 하므로 메모리 낭비 가능 | 외부 클래스의 인스턴스를 생성하지 않으므로 메모리 효율적 |
| 접근할 수 있는 멤버 | 외부 클래스의 인스턴스 멤버에도 접근 가능 | 외부 클래스의 정적 멤버에만 접근 가능 |
| 용도 | 외부 클래스와 밀접한 관계가 있을 때 사용 | 외부 클래스와 독립적으로 기능을 추가할 때 유용 |