카테고리:

업데이트:

1. 들어가기

마커 인터페이스란, 아무 메서드도 담고 있지 않고 단지 특정 속성의 소유를 표시하는 인터페이스입니다.

마커 인터페이스의 대표적인 예로 직렬화 가능을 표시하는 Serializable 인터페이스가 있습니다.

우리는 앞서 Item 39에서 마커 애너테이션을 알아보았습니다.

그럼, 마커 애너테이션과 마커 인터페이스는 어느 경우에 사용해야 할까요?

2. 마커 인터페이스를 사용해야 하는 경우

  1. 타입으로 사용하는 경우

    마커 인터페이스는 타입이기 때문에

    마커 애너테이션을 사용했다면 런타임에 발견될 오류를 컴파일 타임에 잡을 수 있습니다.


  2. 적용 대상을 더 정밀하게 지정해야하는 경우

    마커 애너테이션은 적용 대상을 @Target으로 지정하는데 ElementType.TYPE으로 선언한다면

    모든 타입(클래스, 인터페이스, 열거 타입, 애너테이션)에 달 수 있습니다.

    하지만 클래스, 인터페이스 등 더 세밀하게 제한하지는 못합니다.

    만약, 클래스나 인터페이스에만 적용하고 싶은 경우 마커를 인터페이스로 편하게 정의할 수 있습니다.

    단지 아래와 같이 마커를 달고 구현하기만 하면 됩니다.

     public class Test implements Marker {
       ...
     }
    

3. 마커 애너테이션을 사용해야 하는 경우

이번에는 반대로 마커 애너테이션을 사용해야 하는 경우를 알아보겠습니다.

  1. 클래스나 인터페이스를 제외한 나머지 프로그램 요소(모듈, 패키지, 필드 등)에 마킹해야 하는 경우

    마커 인터페이스는 클래스와 인터페이스에만 적용할 수 있기 때문에

    그 이외의 프로그램 요소에 마킹해야 하는 경우에는 마커 애너테이션을 사용해야 합니다.


  2. 애너테이션을 적극 활용하는 프레임워크인 경우

    애너테이션을 활발히 활용하는 프레임워크에서는 마커 인터페이스를 사용하는 것보단

    마커 애너테이션을 사용하는 것이 일관성 측면에서 좋습니다.

4. 정리

이번 포스트는 마커 애너테이션과 마커 인터페이스를 사용해야 하는 경우에 대해 알아보았습니다.

마커 인터페이스는 단지 타입 정의가 목적이거나, 클래스나 인터페이스에 마킹해야 하는 경우에 사용하고

마커 애너테이션은 클래스나 인터페이스 외의 프로그램 요소에 마킹하거나

애너테이션을 적극 활용하는 프레임워크인 경우 사용할 수 있습니다.

그렇기 때문에 사용하기 전 어떤 경우에 해당하는지 생각해보고 마커를 사용합시다.

            
              📕 개인 기록용 블로그입니다.
              😊 오타나 잘못된 정보가 있을 경우 댓글이나 메일로 말씀해주시면 바로 수정하겠습니다! 😊
          

댓글남기기