Skip to content

Latest commit

 

History

History
42 lines (38 loc) · 2.52 KB

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

File metadata and controls

42 lines (38 loc) · 2.52 KB

마커 인터페이스 vs 마커 어노테이션

소주캉

마커 인터페이스가 뭐지?

  • 아무 메서드도 없다
  • 자신을 구현하는 클래스가 특정 속성(인터페이스)을 가짐만을 표현해준다.
public interface Car {
}

'마커 어노테이션'은 뭐지?

근데 애노테이션은 뭐지?

  • 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것
  • 주석처럼 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공할 수 있다
  • 붙은 코드 자체에는 아무런 영향을 미치지 않으나 컴파일러에게 정보를 제공한다.

'마커'가 붙은 이유는?

  • 아무 매개변수 없이 단순히 대상에 마킹(붙인다) 라는 뜻에서 마커 어노테이션
@Test

'마커 인터페이스'가 '마커 어노테이션'보다 나은 경우

  1. 마커 인터페이스는 이를 구현한 클래스의 인스턴스들을 구분하는 타입으로 쓸 수 있으나, 마커 어노테이션은 그렇지 않다.
    • 마커 인터페이스는 타입이므로 마커 어노테이션 사용시 런타임에 발견될 오류를 컴파일 타임에 잡을 수 있다.
  2. 적용 대상을 더 정밀하게 지정할 수 있다.
    • 적용 대상을(@Target)을 ElementType.TYPE으로 선언한 어노테이션은 모든 타입(클래스, 인터페이스, 열거 타입, 어노테이션)에 달 수 있다.
    • 타입을 더 세밀하게 제한하지 못한다.
    • 마커 인터페이스로 마킹하고 싶은 클래스에서만 그 인터페이스를 구현하면 타입을 제한할 수 있다.

마커 인터페이스를 써야하는 경우

  • 이 마킹이 된 객체를 매개변수로 받는 메서드를 작성할 일이 있을까?그렇다인 경우
    • 마커 인터페이스를 해당 메서드의 매개변수 타입으로 사용하여 컴파일 타임에 오류를 잡아낼 수 있다.
public Cars(Collection<Car> cars)

마커 어노테이션마커 인터페이스보다 나은 경우

  • 거대한 어노테이션 시스템의 지원을 받을 수 있다.
    • 스프링의 @Controller, @Entity 등등

마커 어노테이션을 써야하는 경우

  • 클래스와 인터페이스 이외 요소(모듈, 패키지, 필드, 지역변수)에 마킹해야 할 때
  • 어노테이션을 활발히 사용하는 프레임워크에서 사용하려는 경우(스프링) 등