210804 수 TIL

bongf·2021년 8월 4일
0

TIL

목록 보기
39/40

✔ 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이냐 아니냐의 차이다

    1. 중요한 차이 중 하나는 inner class는 바깥 클래스의 멤버변수에 접근할 수 있지만 static nested class는 바깥 클래스의 non-static 멤버변수에 접근하지 못한다.
    1. 생성시에 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를 이 클래스 안에서만 쓰겠다고 하는 말이라고 했다.

profile
spring, java학습

0개의 댓글