X Tutup
Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

README.md

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

핵심정리

  • 마커 인터페이스는 새로 추가하는 메서드없이 단지 타입 정의가 목적일 때 사용한다. ex. Serializable 인터페이스
  • 마커 애너테이션은 클래스나 인터페이스 외의 프로그램 요소에 마킹해야 하거나, 애너테이션을 적극 활용하는 프레임워크의 일부로 그 마커를 편입시키고자 할 때 사용한다. ex. @Controller

마커 인터페이스가 마커 애너테이션보다 나은 2가지 이유

1. 마커 인터페이스는 이를 구현한 클래스의 인스턴스들을 구분하는 타입으로 쓸 수 있으나, 마커 애너테이션은 그렇지 않다.

마커 인터페이스는 이 인터페이스를 사용하는 클래스나 인터페이스의 타입을 명확하게 나타낸다. 그렇기 때문에 메서드 구현 시 해당 타입 외에 다른 타입을 못 오게 만들 수 있다. 이는 컴파일 시 에러를 잡을 수 있는 장점이다.

2. 마커 인터페이스는 적용 대상을 더 정밀하게 지정할 수 있다.

마커 인터페이스를 사용한 클래스나 인터페이스는 구체적으로 마커 인터페이스를 구현하면 된다. 비록 메서드는 하나도 없기 때문에 구현할 메서드든 없지만 타입을 확실하게 지정해줄 수 있다. 반면에, 마커 애너테이션을 구현할 때 타켓을 ElementType.TYPE으로 구현한 경우 타입을 더 세밀하게 제한하지 못한다.

마커 애너테이션이 나은 이유

1. 거대한 애너테이션 시스템의 지원을 받을 때 유리

스프링 프레임워크처럼 애너테이션을 적극 활용하는 프레임워크에서는 마커 애너테이션을 쓰는 쪽이 일관성을 지키는 데 유리할 것이다.

X Tutup