📍 @어노테이션
- 자바 소스 코드에 메타정보를 표현하기 위해서 사용된다.
메타정보
- 소스코드에 추가해서 사용할 수 있는 부가정보
- 컴파일 과정, 애플리케이션 실행과정에서 코드를 어떻게 처리해야 하는지를 알려주기 위한 추가정보
📌 @어노테이션의 형식
@Target({ElementType.TYPE, ElementType.Method, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface 어노테이션이름 {
타입 속성명() default 기본값;
타입 속성명();
}
1. @Target
- 메타어노테이션
- 어노테이션을 적용할 위치를 나열한다.
- 종류
- ElementType.TYPE
- 클래스, 인터페이스, 열거형에 적용할 수 있다.
- ElementType.ANNOTATION_TYPE
- ElementType.FIELD
- ElementType.CONSTRUCTOR
- ElementType.METHOD
- ElementType.PARAMETER
2. @Retention
- 메타어노테이션
- 어노테이션 유지 기간을 설정한다.
- 종류
- Retention.SOURCE
- 컴파일 이후에는 삭제된다.
- 소스코드에서 활용된다.
- Retention.CLASS
- 자바 실행파일(.class 파일)까지 어노테이션 정보가 유지된다.
- Retention.RUNTIME
- 자바 실행파일(.class 파일)까지 어노테이션 정보가 유지되고, 애플리케이션 실행 시점에 정보를 가져올 수 있다.
- 일반적으로 대부분의 어노테이션 혹은 사용자 정의 어노테이션의 유지기간으로 사용된다.
3. @Documented
- 자바 API 문서에 어노테이션 정보가 표시되도록 한다.
4. @Inherited
- 자식 클래스가 어노테이션을 상속받을 수 있다.
5. @Repeatable
@어노테이션 사용하기
- 어노테이션 적용 시 값을 지정하지 않으면, 기본값이 적용된다.
public @Sample {
String path() default "";
String method() default "GET";
}
@Sample(path = "/add", method = "GET")
@Sample(path = "/add", method = "POST")
@Sample(path = "/add")
- 어노테이션의 요소이름이 value라면 어노테이션 작성 시 요소의 이름은 생략 가능하다.
public @interface Sample {
String value();
}
@Sample(value = "값")
@Sample("값")
- 어노테이션 요소의 타입이 배열인 경우 중괄호를 사용해야 한다.
단, 값이 하나밖에 없을 때는 중괄호 생략 가능
pulic @interface Sample {
String[] path();
}
@Sample(path = "/add")
@Sample(path = {"/add"})
@Sample(path = {"/add", "/create"})
@어노테이션의 규칙
- 요소의 타입은 기본자료형, String, enum, 어노테이션, Class만 허용한다.
- 괄호() 안에 매개변수를 선언할 수 없다.
- 예외를 선언할 수 없다.