- 아무 메서드도 담고 있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 인터페이스
- 예)
Serializable
: 나를 구현한 클래스의 인스턴스는 직렬화할 수 있어! Set
도 일종의 마커 인터페이스로 볼 수 있다.Collection
의 하위 타입에만 적용할 수 있다.Collection
이 정의한 메서드 외에는 새로 추가한 것이 (거의) 없다.- 이처럼 특정 인터페이스의 하위 타입에만 적용할 수 있으며, 규약에 손대지 않은 마커 인터페이스는 충분히 있음직하다.
- 요소가 하나도 정의되지 않은 애너테이션
- 프로그램에게 추가 정보를 제공하여 특별한 처리를 하도록 한다.
- 예)
@Override
,@Test
- 마커 인터페이스를 구현한 클래스의 인스턴스들을 구분하는 타입으로 쓸 수 있다.
- 마커 인터페이스도 어엿한 타입이다.
- 따라서 오류를 컴파일타임에 잡을 수 있다.
- 적용 대상을 더 정밀하게 지정할 수 있다.
@Target(ElementType.TYPE)
으로 선언한 애너테이션은 모든 타입(클래스, 인터페이스, 열거 타입, 애너테이션)에 달 수 있다.- 하지만 마커 인터페이스는 마킹하고 싶은 클래스에서만 그 인터페이스를 구현하면 된다.
- 부착할 수 있는 타입을 더 세밀하게 제한할 수 있다.
- 거대한 애너테이션 시스템의 지원을 받는다.
- 애너테이션을 적극 활용하는 프레임워크에서는 마커 애너테이션을 사용하는 것이 유리할 수 있다.
- 적용 대상이
ElementType.TYPE
인 마커 애너테이션은, 마커 인터페이스가 낫지 않을지 고민해 보자. - 마커 인터페이스
- 마킹된 객체를 매개변수로 받는 메서드를 작성할 일이 있을 때 → 마커 인터페이스를 매개변수 타입으로 하여 컴파일타임에 오류를 잡을 수 있다.
- 마커 애너테이션
- 클래스나 인터페이스가 아닌, 모듈, 패키지, 필드, 지역변수 등에 마킹할 때
- 애너테이션을 활발히 활용하는 프레임워크에서 사용할 때