코틀린 언어 정리 6-5

Annotations

Annotation class의 생성자

설명

애노테이션으로 선언한 클래스는 생성자 매개변수를 val 로 선언하는 방법으로 프로퍼티를 추가할 수 있습니다. 그 외 일반 클래스에서 멤버를 추가하는 다른 방법들은 지원하지 않습니다.


생성자 예제는 이전에 나온 Usage(Annotation들의 간단한 사용예)의 TA3 선언 부분을 참고하면 됩니다.


매개변수(프로퍼티)

매개변수는 val(읽기 전용) 프로퍼티로만 선언 가능하며 선언 가능한 타입은 아래와 같습니다.

매개변수로 가능한 타입들

Java의 기본 타입과 대응되는 타입

Int, Long 등의 Number 계열, String 등

strings

문자열

classes

일반 사용자 정의 클래스가 아니라 TestAnnotation::class 와 같은 KClass<*> ⇒ 리플렉션 클래스

enums

열거형 상수

다른 애노테이션들

기존에 정의한 다른 애노테이션 클래스 타입으로도 프로퍼티 선언이 가능합니다.

위에 열거한 타입들의 배열

지금까지 언급한 타입 중 하나를 원소 타입으로 하는 배열 타입으로 프로퍼티를 추가할 수 있습니다. [1, 2, 3], arrayOf<Int>(1, 2, 3, ...)



예제

import kotlin.reflect.KClass


annotation class TA_other


class ClassA {}


enum class EnumClassA {

   EN_A, EN_B, EN_C

}


annotation class TA (

   val primitiveType: Int,

   val stringType: String,

   val kclassType: KClass<ClassA>,

   val enumType: EnumClassA,

   val otherClass: TA_other,

   val enumTypeArray: Array<EnumClassA>

)


@TA(

   10,

   "20",

   ClassA::class,

   EnumClassA.EN_B,

   TA_other(),

   [EnumClassA.EN_A, EnumClassA.EN_B, EnumClassA.EN_C] //arrayOf<EnumClassA>(EnumClassA.EN_A, EnumClassA.EN_B, EnumClassA.EN_C)  // 두 가지 형태 모두 가능하지만 최종적으로 array literal "[...]"를 사용합니다. 즉 arrayOf는 [...]로 대체 됩니다.

) class ClassB


fun test () {}

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

//}



+ Recent posts