자바 중첩(nested) 클래스
임의의 클래스 내에 정의된 클래스를 중첩(nested) 클래스라고 합니다. 이는 클래스의 사용을 특정 클래스나 함수로 제한하기 위해서 사용됩니다.

당연한 이야기 이지만, 중첩 클래스는 탑레벨(top-level: 둘러싸고 있는 클래스)의 모든 멤버에 접근 가능합니다. 즉, private으로 선언된 멤버 변수에 접근 가능한데, 이는 탑레벨 클래스 관점에서 중첩 클래스는 클래스 내부이기 때문입니다.

중첩 클래스는 다음과 같은 종류가 있습니다.
static nested class
static 선언된 중첩 클래스
inner [non-static] class
static 선언되지 않은 일반 중첩 클래스
local [inner] class
메소드 내부에 존재하는 이너 클래스
anonymous [inner] class
네이밍이 없는 로컬 클래스

이 중에서 가장 이해하기 힘든 클래스는 스태틱(static) 중첩 클래스(이하, 스태릭 클래스)입니다. 클래스의 선언인데, 굳이 static으로 선언하는 이유가 쉽게 납득 되지 않기 때문입니다. 스태틱 클래스를 이해하기 위해서는 이너(inner) 클래스부터 접근하는 것이 좋을 것 같습니다.

이너 클래스는 인스턴스와 관련이 있습니다. 인스턴스 멤버와 마찬가지로 탑레벨 클래스가 인스턴스화 되지 않으면, 이너 클래스 역시 인스턴스화 되지 않습니다. 또 한가지 중요한 사실은 이너 클래스의 인스턴스는 탑레벨 클래스의 인스턴스 내부에 존재한다는 것입니다.

그러나 스태틱 클래스의 인스턴스는 탑레벨 인스턴스 내에 존재할 수도 밖에 존재할 수도 있습니다. The Java Programming Language라는 책을 살펴보면, a static nested class acts just like any top-level class라고 적혀있습니다. 즉, 스태틱 클래스는 일반 (탑레벨) 클래스와 동일하게 사용될 수 있습니다.

그렇다면 스태틱 클래스는 왜 필요한가? 이는 접근 제어 때문입니다. 스태틱 클래스도 중첩 클래스이므로 탑레벨의 모든 멤버에 접근할 수 있습니다. 그러므로 한 클래스(스태틱 클래스)가 다른 클래스(탑레벨 클래스)의 멤버들을 제약없이 편리하게 이용하려는 경우에 적합합니다. 자세한 예는 The Java Programming Language를 참고하도록 합니다.

참고: Nested Classes (The Java Tutorial)
by 키포스 | 2006/06/22 15:22 | 프로그래밍 | 트랙백 | 덧글(2)
트랙백 주소 : http://kipos.egloos.com/tb/97873
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by Toris at 2008/05/14 23:17
좋은 글 잘 봤습니다.
그런데 마지막 참고에 Totorial 이 아니라 Tutorial이 아닐까요?^^
Commented by 키포스 at 2008/08/19 12:54
수정했습니다~

:         :

:

비공개 덧글



< 이전페이지 다음페이지 >