Annotation
1 Annotation
- 레퍼런스
- 코틀린의 애노테이션 개념과 자바와 마찬가지다.
- 애노테이션은 메타데이터라고 볼 수 있다.
- 메타데이터란 애플리케이션이 처리해 할 데이터가 아니라 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지 알려주는 정보이다.
2 메타 Annotation
- 애노테이션 클래스에도 애노테이션을 붙일 수 있다.
- 애노테이션 클래스의 추가적인 속성을 부여하기 위해 메타 애노테이션을 사용한다.
- 애노테이션 클래스에 적용할 수 있는 애노테이션을 메타 애노테이션이라고 한다.
2.1 @Target
@Target
으로 애노테이션의 적용 대상을 지정할 수 있다.- 적용 대상은
AnnotationTarget
enum 클래스에 정의되어 있다. - 참고
- 적용 대상은
@Target
을 지정하지 애노테이션은 모든 대상에 적용할 수 있는 애노테이션이 되며 아래와 같은 대상에 적용 가능하다.- CLASS, PROPERTY, FIELD, LOCAL_VARIABLE, VALUE_PARAMETER, CONSTRUCTOR, FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER.
2.2 @Retention
- 어노테이션 정의 시 사용 용도에 따라 어느 범위까지 유지할 것인지 설정한다.
- 소스상에서만 유지
- 컴파일 클래스까지 유지
- 런타임 시에도 유지
- 어노테이션 유지 정책은
java.lang.annotation.RetentionPolicy
에 아래와 같은 열거 상수로 정의되어 있다. @Retention
어노테이션을 사용해서 유지 정책을 지정한다.- 자바에서는
CLASS
로 지정되어 런타임엔 사용할 수 없다. - 코틀린에서는 기본적으로
RUNTIME
으로 지정한다.
- 자바에서는
Enum Constant | Description |
---|---|
CLASS | 바이트 코드 파일까지 어노테이션 정보를 유지한다. 하지만 리플렉션을 이용해서 어노테이션 정보를 얻을 수 없다. |
RUNTIME | 바이트 코드 파일 까지 어노테이션을 유지하면서 리플렉션을 이용해서 런타임 시에 어노테이션 정보를 얻을 수 있다. |
SOURCE | 소스상에서만 어노테이션 정보를 유지한다. 소스 코드를 분석할 때만 의미가 있으며, 바이트 코드 파일에는 정보가 남지 않는다. |
3 Annotation 선언
- 애노테이션 클래스 선언은 annotaion 변경자를 class 앞에 붙이면 된다.
- 애노테이션 클래스는 오직 선언이나 식과 관련 있는 메타데이터의 구조를 정의하기 때문에 내부에 아무 코드도 들어올 수 없다.
- 컴파일러가 애노테이션 클래스에 본문을 정의하지 못하게 한다.