중첩 클래스(nested class)
란 다른 클래스 안에 정의된 클래스를 말합니다. 대표적인 예로는 정적 멤버 클래스
, (비정적) 멤버 클래스
, 익명 클래스
, 지역 클래스
이렇게 네 가지가 있습니다.
- 멤버 클래스에서 바깥 인스턴스에 접근할 일이 없다면 무조건 static을 붙여서 정적 멤버 클래스로 만들자 입니다.
- static을 생략하면 바깥 인스턴스로의 숨은 외부 참조를 갖게 됩니다. 이 참조를 저장하려면 시간과 공간이 소비되는 단점이 있습니다.
- 더 큰 단점은 가비지 컬렉터가 바깥 인스턴스를 수거하지 못하는 메모리 누수가 생길 수 있다는 것입니다.
중첩 클래스에는 네 가지가 있으며, 각각의 쓰임이 다르다. 메소드 밖에서도 사용해야 하거나 메소드 안에 정의하기엔 너무 길다면 멤버 클래스로 만든다. 멤버 클래스의 인스턴스 각각이 바깥 인스턴스를 참조한다면 비정적으로, 그렇지 않으면 정적으로 만들자. 중첩 클래스가 한 메소드 안에서만 쓰이면서 그 인스턴스를 생성하는 지점이 단 한 곳이고 해당 타입으로 쓰기에 적합한 클래스나 인터페이스가 이미 있다면 익명 클래스로 만들고, 그렇지 않으면 지역 클래스로 만들자.