[Effective Java 3/e] 아이템 41 - 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라


아이템 41 - 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라

마커 인터페이스

  • 아무 메서드도 담고 있지 않고, 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 인터페이스
    • ex) Serializable 인터페이스

마커 인터페이스가 마커 애너테이션 보다 나은 점

  • 마커 인터페이스는 이를 구현한 클래스의 인스턴스들을 구분하는 타입으로 쓸 수 있다.
  • 에러 발견
    • 마커 애너테이션 - 런타임에 오류 발견
    • 마커 인터페이스 - 컴파일 타임에 오류 발견
  • 적용 대상을 더 정밀하게 지정 가능
    • 마커 애너테이션 - 적용 대상(@Target)을 ElementType.TYPE 으로 선언한 애너테이션은 모든 타입(클래스, 인터페이스, 열거 타입, 애너테이션)에 달 수 있다.
    • 마커 인터페이스 - 마킹하고 싶은 클래스에서만 그 이너페이스를 구현 하면 된다.
      • ex) Set - Set은 Collection의 하위 타입에만 적용 가능하며, Collection이 정의한 메서드 외에는 새로 추가한 것이 없다.

마커 애너테이션이 마커 인터페이스 보다 나은 점

  • 거대한 애너테이션 시스템의 지원을 받을 수 있다.
    • 애너테이션을 적극 활요하는 프레임워크에서는 마커 애너테이션을 쓰는게 낫다.