-
[Kotlin] Runtime 에 타입정보를 알아내는 방법프로그래밍 언어/Kotlin 2023. 5. 15. 20:37
Runtime 에 타입정보를 알아내는 법 (순수 Generic)
fun <T> printGenerics(value: T, classType: Class<T>) { when (classType) { String::class.java -> { println("String : $value") } Int::class.java -> { println("Int : $value") } } } printGenerics("print generics function", String::class.java) printGenerics(1000, Int::class.java)
Runtime 에 타입정보를 알아내는 법 (inline function)
inline fun <reified T> printGenerics(value: T) { when (T::class) { String::class -> { println("String : $value") } Int::class -> { println("Int : $value") } } } printGenerics1("print generics function") printGenerics1(1000)
inline function
inline function은 함수 내의 코드를 inline으로 호출하는 위치에 붙여넣어주는 기능이다.
함수를 호출하지 않기 때문에 성능이 좋지만 컴파일 할 바이트코드의 양이 많아질 수 있다.
복사 붙여넣기 되어지기 때문에 런타임에 타입을 알 수 있다.
대충 아래와 같이 된다고 생각하자. (필자의 뇌피셜이니 무분별한 흡수는 주의 요망)
Kotlin(Compile 전)
fun caller() { val iAmInt : Int = reifiedFun() val iAmString : String = reifiedFun() val iAmLong : Long = reifiedFun() } inline fun<reified T> reifiedFun(): T { return when (T::class) { String::class -> "I am String! " as T Int::class -> 10 as T else -> { println("이상한 타입이군요...") return "I'm not sure what to return" as T } } }
Kotlin(Compile 후)
fun caller() { val iAmInt : Int = 10 as Int val iAmString : String = "I am String!" as String val temp = { println("이상한 타입이군요...") "I'm not sure what to return" as T } val iAmLong : Long = temp() // compile 은 성공하나, runtime 에 해당 라인에서 에러 발생 } inline fun<reified T> reifiedFun(): T { return when (T::class) { String::class -> "I am String! " as T Int::class -> 10 as T else -> { println("이상한 타입이군요...") return "I'm not sure what to return" as T } } }
Reference
Kotlin - Reified를 사용하는 이유?
Reified 키워드는 Generics로 inline function에서 사용되며, Runtime에 타입 정보를 알고 싶을 때 사용합니다. Reified가 없다면 타입 정보를 담고 있는 객체를 인자로 넘겨야해서 파라미터 개수가 늘어납니
codechacha.com
728x90'프로그래밍 언어 > Kotlin' 카테고리의 다른 글
[Kotlin] 객체 데이터 암호화 하기 (0) 2023.05.08 [Kotlin] static nested Class, inner Class 문법 정리 (0) 2022.11.06 [Kotlin] 코틀린에서 JPA Lazy Loading 적용하기 (0) 2022.09.25 [Kotlin] 코틀린 문법 요약 (자바코드로 훑어보기) (0) 2022.09.19