아이템 24 - 멤버 클래스는 되도록 static으로 만들라.
JAVA ·네 종류의 중첩 클래스와 각각의 쓰임
- 정적 멤버 클래스
- 흔히 바깥 클래스와 함께 쓰일 때만 유용한 public 도우미 클래스로 사용된다.
- eg) Calculator.Operation.PLUS
- 비정적 멤버 클래스
- 바깥 클래스의 인스턴스와 암묵적으로 연결된다.
- 그래서 비정적 멤버 클래스의 인스턴스 메서드에서 정규화된 this(클래스명.this)를 사용해
바깥 인스턴스의 메서드를 호출하거나 바깥 인스턴스의 참조를 가져올 수 있다. - 바깥 인스턴스 없이는 생성할 수 없다.
- 그래서 비정적 멤버 클래스의 인스턴스 메서드에서 정규화된 this(클래스명.this)를 사용해
- 어댑터를 정의할 때 자주 쓰인다.
- 멤버 클래스에서 바깥 인스턴스를 참조할 필요가 없다면 무조건 정적 멤버 클래스로 만들자.
- 바깥 클래스의 인스턴스와 암묵적으로 연결된다.
- 익명 클래스
- 바깥 클래스의 멤버가 아니며, 쓰이는 시점과 동시에 인스턴스가 만들어진다.
- 비정적인 문맥에서 사용될 때만 바깥 클래스의 인스턴스를 참조할 수 있다.
- 자바에서 람다를 지원하기 전에 즉석에서 작은 함수 객체나 처리 객체를 만들 때 주로 사용했다.
- 물론 이제는 람다에게 그 자리를 물려줬다.
- 정적 팩터리 메서드를 만들 때 사용할 수 있다.
- 지역 클래스
- 가장 드물게 사용된다.
- 지역 변수를 선언하는 곳이면 어디든 지역 클래스를 정의해 사용할 수 있다.
- 유효 범위도 지역변수와 같다.
- 가독성을 위해 짧게 작성해야 한다.