티스토리 뷰

반응형

마커 인터페이스

  • 자신을 구현하는 클래스가 특정 속성을 가짐을 나타내는 인터페이스
  • 아무 메서드도 담고 있지 않음
  • 예를 들어 Serializable , Cloneable 인터페이스

 

마커 인터페이스가 마커 애너테이션보다 좋은점

1) 마커 인터페이스는 이를 구현한 클래스의 인스턴스들을 구분하는 타입으로 쓸 수 있으나 마커 애너테이션은 그렇지 않다. → 컴파일타임에 오류 검출 가능

  • Serializable의 writeObject() : 매개변수에서 Serializable 타입인지 확인을 안하고, Object 로 받아 instanceof로 타입검사를 하고 있다. → 직렬화할 수 없는 객체를 넘기면 런타임 오류로 발견할 수가 있다. → 마커 인터페이스의 장점인 컴파일 오류 검출을 살리지 못한 케이스이다.

2) 적용 대상을 더 정밀하게 지정할 수 있다.

적용 대상으로 ElementType.TYPE을 선언한 애너테이션은 모든 타입에 달 수 있지만, 더 세밀하게 제한하지 못한다.

특정 인터페이스를 구현한 클래스에만 적용하고 싶은 마커가 있다면, 그냥 마킹하고 싶은 클래스에서만 구현하면 된다. (하위 타입이 됨)

 

 

마커 애너테이션과 마커 인터페이스의 쓰임

1) 마커 애너테이션의 쓰임 : 클래스와 인터페이스 외의 프로그램 요소에 마킹해야할 때, 애너테이션 많이 사용하는 프레임워크

2) 마커 인터페이스의 쓰임 : 마커를 클래스나 인터페이스에 적용해야 할 때, 마킹이 된 객체를 매개변수로 받는 메서드를 작성할 일이 있다면 마커 인터페이스를 사용한다.

 

 

결론

마커 인터페이스와 마커 애너테이션은 각자의 쓰임이 있음

새로 추가하는 메서드 없이 단지 타입 정의가 목적이면 마커 인터페이스를 선택해라.

적용 대상이 ElementType.TYPE인 마커 애너테이션을 작성하고 있다면, 마커 인터페이스가 더 나을지 고민해보자.

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday