-
kotlin) 어노테이션과 리플렉션kotlin 2024. 7. 24. 23:10
코틀린의 어노테이션
@Retention
어노테이션이 저장되고 유지되는 방식을 제어
- SOURCE : 어노테이션이 컴파일 때만 존재한다.
- BINARY : 어노테이션이 런타임 때도 있지만, 리플렉션을 쓸 수 없다.
- RUNTIME : 어노테이션이 런타임 때 존재하고, 리플레션을 쓸 수 있다.(기본값)
@Retention(AnnotationRetention.RUNTIME) //어노테이션이 저장되고 유지되는 방식을 제어 annotation class Shape public class TestAnnotation { }
@Tartget
어노테이션이 어디에 붙일지 선택할 수 있다. 종류가 많다.
@Target(AnnotationTarget.FIELD, AnnotationTarget.ANNOTATION_CLASS) annotation class Shape public class TestAnnotation { }
@KClass
코드로 작성한 Class 의 정보들을 가지고있는 다른 클래스가 KClass
annotation class Shape( val text : String, val number : Int, val clazz : KClass<*> ) public class TestAnnotation { } fun main(){ val clazz : KClass<TestAnnotation> = TestAnnotation::class }
코틀린의 리플렉션
package p17; import kotlin.jvm.internal.Reflection import kotlin.reflect.KClass import kotlin.reflect.KType import kotlin.reflect.cast class GoldFish(val name: String) { fun swim(){ } } fun main(){ //KClass 안에는 name 프로퍼티를 갖고있는 KProperty, swim 함수를 갖고있는 KFunction 이 존재 val kClass : KClass<GoldFish> = GoldFish::class var ref = Reflection() val kClass2 : KClass<out Reflection> = ref::class //우선 이름으로 가져와서 val KClass3 : KClass<out Any> = Class.forName("reflect.Reflection").kotlin //패키지 이름에서 리플랙션 //KType, 타입을 표현, Int? val kType : KType = GoldFish.class.createType() } fun catToGoldFish(obj:Any): GoldFish { //obj 를 GoldFish 로 cast 한다. return GoldFish::class.cast(obj) }
'kotlin' 카테고리의 다른 글
kotlin) 제네릭 (0) 2024.07.21 kotlin) 복잡한 함수형 크로그래밍 (0) 2024.07.20 kotlin) Kotlin 의 지연과 위임 (0) 2024.07.18 kotlin) 추가적으로 알아두어야 할 코틀린 특성 (0) 2024.07.13 kotlin) 코틀린에서의 FP (0) 2024.07.09