코틀린 언어 정리 6-4

Annotations

Usage ( Annotation들의 간단한 사용 예 )

다음 예제를 확인하면 위치 기반 적용 방법을 이용한 Annotation들의 전반적인 사용 방법을 확인할 수 있습니다.

예제

import kotlin.reflect.full.findAnnotation


annotation class TA1


// 애노테이션에 메타 에노테이션(속성)이 적용된 경우

@Target(AnnotationTarget.CLASS)

annotation class TA2


// 애노테이션 클래스에 읽기 전용 프로퍼티를 추가한 경우

annotation class TA3 ( val desc: String )


// 클래스, 멤버 함수 등에 애노테이션을 적용한 경우

@TA2 class Test {

   @TA1 fun func1 () {

       println("Test::func1()")

   }


   /* 에러: TA2는 AnnotationTarget.CLASS로 지정되어 있으므로 class에만 적용 가능한 annotation입니다.

   @TA2 fun func2 () {

       println("Test::func2()")

   }

    */


   // 애노테이션을 적용하면서 각각의 인스턴스에 각각 다른 데이터를 설정하는 경우

   @TA3("Test::func3...TA3 테스트용 함수") fun func3 () {

       println("Test::func3()")

   }


   // 하나의 대상(여기서는 함수)에 여러개의 애노테이션이 적용된 경우

   @TA1 @TA3("Test::func4...TA4 테스트용 함수") fun func4 () {

       println("Test::func4()")

   }


}


//fun main (args: Array<String> ) {

fun test () {

   var obj1 = Test()

   obj1.func1()


   // 개발자가 애노테이션 정보를 리플렉션을 이용해 주 소스 코드에서 이용하는 경우

   var obj2 = Test()

   var obj2_K_func3 = obj2::func3

   println(obj2_K_func3.annotations)


   var obj2_K_func4 = obj2::func4

   var bAnno2 = obj2_K_func4.findAnnotation<TA2>()

   println(bAnno2)

   var anno3: TA3? = obj2_K_func4.findAnnotation<TA3>()

   println(anno3)

   println(anno3?.desc)

   println(obj2_K_func4.annotations)

}



+ Recent posts