Intro::
이펙티브 자바 정리본입니다.
결론
적용 대상이 ElementType.TYPE인 마커 애너테이션을 작성하고 있다면, 애너테이션이 옳은지 마커 인터페이스가 옳은지 고민을 해보아야 합니다.
마커 인터페이스
•
아무 메서드도 담고 있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 터페이스를 마커 인터페이스라고 합니다.
•
Serializable 인터페이스가 좋은 예시입니다.
◦
자신을 구현한 클래스의 인스턴스는 ObjectOutputStream을 통해 쓸 수 있다고, 즉 직렬화 할 수 있다고 알려줍니다.
마커 인터페이스가 나은점
1.
마커 인터페이스는 이를 구현한 클래스의 인스턴스들을 구분하는 타입으로 쓸 수 있으나, 마커 애너테이션은 그렇지 않습니다.
2.
적용 대상을 더 정밀하게 지정할 수 있습니다.
a.
특정 인터페이스를 구현한 클래스에만 적용하고 싶은 경우.
마커 애너테이션이 나은점
1.
거대한 애어테이션 시스템의 지원을 받습니다.
a.
일관성을 지키는 데 유리할 것입니다.
그렇다면 언제 무엇을 사용해야 할까?
•
마커 인터페이스
◦
새로 추가하는 메서드가 없이 단지 타입 정의가 목적인 경우
•
마커 애너테이션
◦
클래스나 인터페이스 외의 프로그램 요소에 마킹해야 하거나, 애너테이션을 적극 활용하는 프레임워크의 일부로 그 마커를 편입시키고자 하는 경우
◦
클래스와 인터페이스 외의 프로그램 요소(모듈, 패키지, 필드, 지역변수 등)에 마킹해야 할 때
References::
이펙티브 자바 / 조슈아 블로크 지음 (프로그래밍 인사이트)