소주캉
- 아무 메서드도 없다
- 자신을 구현하는 클래스가 특정 속성(인터페이스)을 가짐만을 표현해준다.
public interface Car {
}
- 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것
- 주석처럼 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공할 수 있다
- 붙은 코드 자체에는 아무런 영향을 미치지 않으나 컴파일러에게 정보를 제공한다.
- 아무 매개변수 없이 단순히 대상에 마킹(붙인다) 라는 뜻에서
마커 어노테이션
@Test
마커 인터페이스
는 이를 구현한 클래스의 인스턴스들을 구분하는 타입으로 쓸 수 있으나,마커 어노테이션
은 그렇지 않다.마커 인터페이스
는 타입이므로마커 어노테이션
사용시런타임
에 발견될 오류를컴파일 타임
에 잡을 수 있다.
- 적용 대상을 더 정밀하게 지정할 수 있다.
- 적용 대상을(
@Target
)을ElementType.TYPE
으로 선언한 어노테이션은 모든 타입(클래스, 인터페이스, 열거 타입, 어노테이션)에 달 수 있다. - 타입을 더 세밀하게 제한하지 못한다.
마커 인터페이스
로 마킹하고 싶은 클래스에서만 그 인터페이스를 구현하면 타입을 제한할 수 있다.
- 적용 대상을(
- 이 마킹이 된 객체를 매개변수로 받는 메서드를 작성할 일이 있을까? 에
그렇다
인 경우마커 인터페이스
를 해당 메서드의 매개변수 타입으로 사용하여컴파일 타임
에 오류를 잡아낼 수 있다.
public Cars(Collection<Car> cars)
- 거대한 어노테이션 시스템의 지원을 받을 수 있다.
- 스프링의 @Controller, @Entity 등등
- 클래스와 인터페이스 이외 요소(모듈, 패키지, 필드, 지역변수)에 마킹해야 할 때
- 어노테이션을 활발히 사용하는 프레임워크에서 사용하려는 경우(
스프링
) 등