정의하는게 타입이라면 마커 인터페이스를 사용하자.

아무 메소드 없이 단지 자신을 구현하는 클래스가 특정 속성을 가진다고 표시하는 인터페이스를 마커 인터페이스(marker interface)라고 한다. Serializable이 예다. 마커 인터페이스는 타입으로써 역할을 하지만 마커 어노테이션은 그렇지 않다. 두 번쨰로 마커 인터페이스는 적용 대상을 더 정밀하게 지정할 수 있다.

반대로 마커 어노테이션이 마커 인터페이스보다 나은 점은 어노테이션 시스템의 지원을 받는다는 점을 들 수 있다. 그러면 어노테이션, 인터페이스 언제 써야할까? 클래스와 인터페이스 외 프로그램 요소에 마킹해야 할 때 어노테이션을 써야한다. 마킹이 된 객체를 매개변수로 받는다면 인터페이스를 쓰는 것이 좋다. 그러면 컴파일 타임에 오류를 잡아낼 수 있다. 특히 어노테이션 적용 대상(Target)이 ElementType.TYPE이면 다시 한 번 생각해보는게 좋다.