Search

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

생성일
2023/07/27 00:30
챕터
6장 - 열거 타입과 애너테이션

마커 인터페이스

아무 메서드도 담고 있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가진다는 것을 나타내는 인터페이스를 마커 인터페이스라 부른다.
마커 인터페이스의 대표적인 예로 Serializable이 있는데, Serializable은 자신을 구현하는 클래스가 ObjectOutputStream을 통해 직렬화 가능하다는 것을 알려주는 목적으로 사용된다.
이와 동일한 기능을 하는 마커 애노테이션이 등장했지만, 두 가지 측면에서 여전히 마커 인터페이스가 마커 애노테이션보다 좋다.
마커 인터페이스는 구현 클래스의 인스턴스들을 구분하는 타입으로 쓸 수 있지만 마커 애노테이션은 그렇지 않다.
마커 인터페이스가 적용 대상을 더 정밀하게 지정할 수 있다.
모듈이나 패키지, 필드, 지역변수와 같이 인터페이스 외의 요소에 마킹해야할 때에는 어쩔 수 없이 마킹 애노테이션을 사용해야하겠지만, 클래스나 인터페이스에 마킹을 적용한다면 마킹된 객체를 매개변수로 받는 메서드를 작성할 일이 있을까를 고민했을 때 그럴 것 같으면 마커 인터페이스를 적용하자.