✔ Learned
Inner클래스 vs static nested class
- Inner 클래스와 static nested class가 있다.
- 한 클래스 내부에 non-static으로 선언된 클래스를 inner class라고 하고, static으로 선언된 클래스를 static nested class라고 한다.
- InnerClass
class OuterClass {
...
class InnerClass {
...
}
}
왜 학습?
둘 중 어떤 것을 사용할지에 대해 고민이 많았다.
LinkedList를 구현하는데, 실제 LinkedList가 구현된 코드를 보니 node가 static nested class로 선언되어있기 때문.
이 둘은 어떤 차이가 있을까?
-
차이는 static이냐 아니냐의 차이다
-
- 중요한 차이 중 하나는 inner class는 바깥 클래스의 멤버변수에 접근할 수 있지만 static nested class는 바깥 클래스의 non-static 멤버변수에 접근하지 못한다.

-
- 생성시에 inner class는 바깥 클래스의 인스턴스가 존재해야만 만들어질 수 있는데 static 클래스는 바깥 클래스의 인스턴스가 존재하지 않아도 만들 수 있다.
OuterClass outerObject = new OuterClass();
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
StaticNestedClass staticNestedObject = new StaticNestedClass();
inner class 말고 static nested class를 사용하라
- 공식문서 외 블로그들에서 static inner class를 사용하라는 말을 봤다. inner class는 바깥 클래스에 대한 참조값을 갖기 때문에 가비지 컬렉션이 인스턴스 수거를 못하며 메모리 누수가 발생할 수 있다. [이펙티브 자바]
- 김영한님 강의에서 static 쓰면 장점은 이 scope를 이 클래스 안에서만 쓰겠다고 하는 말이라고 했다.