자바의 애노테이션에 대해 학습하세요.
메타 데이터는 어떠한 데이터에 대한 설명을 해주는 데이터이다.
Built-in Annotation
자바에서 기본적으로 제공하는 어노테이션
종류 | 설명 |
---|---|
@Override | 선언한 메서드가 오버라이드 되었다는 것을 나타냄. 상위(부모)클래스(또는 인터페이스)에서 해당 메서드를 찾지 못하면 컴파일 에러 발생. |
@Deprecated | 해당 메서드가 더이상 사용되지 않음을 표시합니다.해당 메서드를 사용할 경우 컴파일 경고를 발생. |
@SuppressWarnings | 선언한 곳의 컴파일 경고를 무시. |
@SafeVarargs | 제네릭 혹은 가변인자 매개변수를 사용할 때의 경고를 무시한다.(Java 7 이상) |
@FunctionalInterface | 람다 함수등을 위한 인터페이스 지정.(Java 8 이상)메소드가 없거나 두개이상 되면 컴파일 오류 발생 |
Meta Annotation
커스텀 어노테이션을 만들수 있게 제공해주는 어노테이션
종류 | 설명 |
---|---|
@Retention | 어노테이션이 유지되는 기간을 지정하는데 사용한다.(세가지 유지정책 사용) |
@Documented | 해당 어노테이션을 javadoc에 포함시킵니다. |
@Target | 어노테이션이 적용할 위치를 지정합니다. 여러 값일 경우 {} 사용 |
@Inherited | 어노테이션의 상속을 가능하게 합니다. |
@Repeatable | 연속적으로 어노테이션을 사용할 수 있게 해줍니다. |
@interface AnnotationSample{
}
@interface
키워드를 사용하여 어노테이션 타입이라고 선언할 수 있다.
어노테이션은 멤버변수 즉 필드를 가질 수 있다.
@interface AnnotationSample{
int num() default 10;
String str();
char[] arr();
}
Meta Annotation의 하나로 어노테이션의 유지기간을 설정하는 어노테이션이다.
아래와 같은 정책을 이용하여 기간을 지정할 수 있다.
종류 | 설명 |
---|---|
RetentionPolicy.Source | 컴파일 전까지만 유효 |
RetentionPolicy.CLASS | 컴파일러가 클래스를 참조할 때까지 유효 |
RetentionPolicy.RUNTIME | 컴파일 이후에도 JVM에 의해 계속 참조 가능 |
아래와 같이 선언할 수 있다.
@Retention(RetentionPolicy.RUNTIME)
@interface AnnotationSample{
}
@target 어노테이션은 해당 어노테이션이 적용될 위치를 지정하는 어노테이션이다.
종류 | 설명 |
---|---|
ElementType.PACKAGE | 패키지선언 |
ElementType.TYPE | 타입선언 |
ElementType.ANNOTATION_TYPE | 어노테이션 타입 선언 |
ElementType.CONSRTUCTOR | 생성자 선언 |
ElementType.FIELD | 멤버변수 선언 |
ElementType.LOCAL_VARIABLE | 지역 변수 선언 |
ElementType.METHOD | 메서드 선언 |
ElementType.PARAMETER | 전달인자 선언 |
ElementType.TYPE_PARAMETER | 전달인자 타입 선언 |
ElementType.TYPE_USE | 타입 선언 |
아래와 같이 사용할 수 있다.
@Target(ElementType.PACKAGE)
@interface AnnotationSample{
}
해당 어노테이션은 javadoc파이엘 추가시켜주는 어노테이션이다.
javaoc만들기를 이용하면 해당 어노테이션이 달린 어노테이션만 포함되어 있는걸 확인할 수 있다.
annotation processor는 자바 컴파일러 플러그인의 일종으로, 애노테이션에 대한 코드베이스를 검사, 수정, 생성하는 역할이다.
애노테이션을 사용하기 위해서는 애노테이션 프로세서가 필요하다.