728x90
[Annotation]
- 메타데이터 ( 부가기능 )을 코드에 비침투적으로 추가할 수 있는 수단
- 멤버 변수, 함수, 클래스 등 다양한 곳에 위치 시킬 수 있으며 또한 다양한 기능을 가진 다양한 어노테이션이 있음
[기본적인 선언 및 사용방법]
아래 코드는 Test이라는 어노테이션을 제작한 것이며 @Test으로 사용할 수 있습니다.
여기에 기능을 추가하기 위해서는 AOP를 이용할 수도 있으며 reflection을 이용하여 Annotation을 체크 후 기능을 만들어 줄 수도 있습니다.
annotation class Test
[추가 속성]
추가 속성은 어노테이션 위에 또 다른 어노테이션을 달아주는 것입니다. 추가 속성의 대표적인 예는 아래와 같습니다.
- @Target : 어노테이션을 달 수 있는 구성 요소 선정
- 타겟에 선언되지 않고 해당 타켓에 사용하면 정상적으로 동작하지 않을 수 있습니다.
- AnnotationTarget enum 클래스 활용
- @Retention : 어노테이션이 남아있는 단계를 선정합니다.
- 소스(SOURCE), 컴파일 타임(BINARY), 런타임(RUNIME) 중 선택 가능
- 런타임으로 선언하면 런타임중에 어노테이션 정보가 남아있습니다. 그렇지 않으면 어노테이션 정보는 지워집니다.
- AnnotationRetention enum 클래스 활용
이런 추가 속성 어노테이션은 아래처럼 사용할 수 있습니다.
//@Target(AnnotationTarget.CLASS)
//@Retention(AnnotationRetention.RUNTIME)
//annotation class Test
@Target public final annotation class Test public constructor() : kotlin.Annotation {
}
[사용하는 곳]
코틀린에서 어노테이션을 사용할 수 있는 타입은 AnnotationTarget enum 클래스에 정의되어 있다고 말씀드렸습니다. 설정 가능한 곳은 아래와 같습니다.
- 클래스
- 어노테이션 클래스
- 프로퍼티 ( 멤버변수 )
- 필드 ( 프로퍼티의 백킹 필드 포함 )
- 지역변수
- 값 파라미터
- 생성자
- 함수
- 게터 (Getter)
- 세터 (Setter)
- 표현식 (Expression)
'두두의 IT' 카테고리의 다른 글
[Kotlin] operator (0) | 2022.04.11 |
---|---|
[OOP] 추상클래스와 인터페이스 (0) | 2022.04.11 |
[OOP] 접근지정자(Access Specifier) (0) | 2022.04.11 |
[Kotlin] enum class (0) | 2022.04.11 |
[Java, Kotlin] final / open (0) | 2022.04.11 |