어노테이션은 프로그램이 처리 할 메인 데이터가 아닌, 실행과정에서 데이터를 어떻게 처리할것인지 알려주는 서브 데이터라고 볼 수 있다. 사전적 정의인 '주석'에 알맞는 역할을 한다.
Java에서 기본적으로 제공하는 주요 Annotation이다.
@ Override
선언한 메서드가 오버라이딩 되었음을 의미한다. 오버라이딩된 메서드의 이름이 올바른지 등을 체크한다.
@ Deprecated
사용이 권장되지 않는 필드나 메서드에 붙인다. 만약 사용할 경우 컴파일 경고를 발생시킨다. 메소드의 사용에서 "getDate()"처럼 표시된다면 해당 메소드 상위에 @Deprecated 어노테이션이 붙어있기 때문이다. 해당 메소드를 사용한 이전 프로젝트들의 하위 호환성을 위해 메소드를 유지하되 권장하지 않는다.
@ SuppressWarnings
선언된 영역에 대해 컴파일러의 경고를 무시하도록 한다. (표시 X)
@ SafeVarargs
Java7 부터 지원하며 제너릭 같은 가변인자의 매개변수를 사용할 때의 경고를 무시합니다. 즉, 개발자가 직접 안전하다는 표시를 제공함으로써 컴파일러 경고를 무시하게 한다.
@ FunctionalInterface
Java8 부터 지원하며 함수형 인터페이스를 지정하는 어노테이션이다. 함수형 인터페이스임을 표시하는 역할과 올바르게 작성했는지를 컴파일러가 확인할 수 있도록 한다.
다른 Annotation에서 사용되는 Annotation이며 Custom-Annotation 을 생성할 때 주로 사용된다.
@ Retention
컴파일러가 Annotation을 다루는 방법에 대해 기술하며, 어느 특정 시점까지 Annotation이 유지될 것인지를 결정한다.
@ Target
Annotation의 정의에서 적용 대상을 지정하는데 사용한다.
@ Inherited
Annotation의 상속이 가능하도록 한다. 자손 클래스에 상속하고자 할 때 @ Inherited를 붙인다.
@ Repeatable
Java8 부터 지원하며 반복해서 붙일 수 있는 Annotation을 정의할 때 사용한다.
@ Documented
해당 Annotation을 Javadoc에 포함시킨다. Annotation의 사용을 문서화 한다.
- 클래스
- 어노테이션 클래스
- 프로퍼티 ( 멤버변수 )
- 필드 ( 프로퍼티의 백킹 필드 포함 )
- 지역변수
- 값 파라미터
- 생성자
- 함수
- 게터 (Getter)
- 세터 (Setter)
- 표현식 (Expression)