애너테이션(Annotation)은 소스 코드의 설정 정보를 컴파일러나 junit과 같은 프로그램에게 제공하는 역할을 한다.
java.lang.annotation 인터페이스를 상속받기 때문에 다른 클래스나 인터페이스를 상속 받을 수 없다.
자바에서 제공하는 애너테이션은 표준애너테이션과 메타애너테이션이 있다.
이름 | 역할 |
---|---|
@Override | 오버라이딩을 올바르게 했는지 컴파일러가 체크하게 한다. |
ex ) 개발자가 메소드 이름을 오타내는 실수를 했을때 확인해준다. | |
@Deprecated | 앞으로 사용되지 않을 것을 권장하는 필드나 메서드에 붙인다. |
ex ) 새로운 기술로 대체 되었지만 하위 호환성을 위해 남겨두었을 경우에 쓰임. | |
@FunctionalInterface | 함수형 인터페이스의 선언이 바르게 선언되었는지 컴파일러가 확인한다. |
ex ) 함수형 인터페이스를 선언할 때 쓰고, 추상메소드가 1개인지 확인해준다. | |
@SuppressWarnings( ) | 컴파일러의 경고메세지가 나타나지 않게 억제한다. |
ex ) 경우에 따라서 경고가 발생할 것이 충분히 예상됨에도 묵인해야 할 때 주로 사용한다. |
애너테이션을 만들때 사용하는 애너테이션으로
애너테이션의 적용 대상 및 유지 기간을 지정하는 데에 사용된다.
java.lang.annotation패키지에 포함되어있다.
이름 | 역할 |
---|---|
@Target | 애너테이션 정의시, 적용할 “대상"을 지정하는데 사용 |
ex ) @Target (TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR...) | |
@Retention | 애너테이션이 유지되는 기간을 지정하는데 사용 SOURCE, RUNTIME, CLASS |
ex ) @Retention(RetentionPolicy.SOURCE) | |
@Documented | javadoc로 작성한 문서에 포함시킬때 사용 |
@Inherited | 애너테이션을 자손클래스에 상속하고자 할때 사용 |
@Repeatable | 반복해서 붙일 수 있는 애너테이션을 정의할때 사용 |
사용자가 직접 애너테이션을 정의해서 사용하는 것이다.
애너테이션을 정의하는 방법은 인터페이스를 정의하는 것과 비슷하다.