2007년 7월 27일 금요일

Java static inner class란?

Java에서 사용되는 static inner class와 inner class 차이를 알아보았다.

A클래스 내에 B라는 static innter class가 존재한다고 했을 때,
사실 B클래스는 A클래스의 inner class가 아니다.
그러므로, 일반적인 형태처럼 new 연산자를 사용하면 된다.
A.B name = new A.B();
static으로 메모리에 담기는 것과 static 없이 메모리에 담기는 것의 차이는
'static inner 클래스는 inner 클래스가 아니다'라는 점과 관련이 있는데,
일반적인 inner 클래스는 인스턴스 내부에 레퍼런스를 가지고 있다.
그래서 outer 클래스를 인스턴스화할 때, 내부클래스 레퍼런스의 선언이 이루어지고, 여기에 내부클래스를
new 연산자로 할당하는 것이다. (A클래스의 인스턴스 없이는 인스턴스 멤버필드의 선언도 접근도 불가능하다는 것과 마찬가지 이다.)
반면 static으로 선언된 내부클래스는 외부클래스에 클래스 레퍼런스를 가지고 있다.
A.B name = new A.B();
라는 문장은 'A클래스에 존재하는 B클래스'라고 해석하면 된다. 일반적인 내부클래스가 'A 클래스 객체안에 존재하는 B 클래스 객체'라는 것과는 대조적이다.
즉, 실제적으로 static inner 클래스는 단순히 A라는 클래스를 통해 참조하는 것만 다를 뿐 다른 점은 일반적인 클래스와 다를바가 전혀 없다.
그래서, 내부클래스만이 갖는 외부클래스와의 특별한 관계도 성립하지 않는다. 따라서 static inner 클래스는 문법적으로는 inner 클래스지만, 실제적으로는 문법적인 의미를 제외하면 inner 클래스라고 할 수 없다.

댓글 없음:

댓글 쓰기