2010. 8. 14. 02:38

inner class and static nested class

자바에서 내부 클래스 (inner class) 와 정적 중첩 클래스 (static nested class)의 주요 차이점은 무엇입니까? 설계/구현시 이들 중 어떤것을 선택해야 하는지요?

중첩 클래스(nested class)

중첩 클래스는 두 카테고리로 나누어 집니다. 정적 과 비 정적. static 으로 선언된 중첩 클래스는 간단히 정적 중첩 클래스 (static nested class) 라 부릅니다. 비정적 중첩 클래스는 내부 클래스(inner class)라고 부릅니다.

1. 정적 중첩 클래스(static nested class)

정적 중첩 클래스 는 아래 예처럼 접근할 수 있습니다.

 OuterClass.StaticNestedClass

예를 들어, 정적 중첩 클래스의 객체를 생성하기 위해서는 아래 구문을 사용합니다.

 OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();

2. 내부 클래스(inner class)

내부 클래스의 인스턴스 객체는 외부 클래스(outer class)의 인스턴스 내에서 존재합니다. 



아래 클래스를 살펴봅시다.

 class OuterClass {
     ...
     class InnerClass {
        ...
     }
}    

내부 클래스의 인스턴스는 외부 클래스 (outer class)의 인스턴스 내에서만 존재할 수 있으며 메소드 및 필드 역시 '외부클래스.내부클래스' 형식으로 접근할 수 있습니다.

내부 클래스를 인스턴스화하기 위해서는, 외부 클래스의 인스턴스를 먼저 생성해야 합니다. 그러고 나서, 아래 구문을 이용하여 외부 클래스 내의 내부 클래스를 생성합니다.

 OuterClass.InnerClass innerObject = outerObject.new InnerClass();