reified + inline

2023. 5. 3. 16:50개발/Kotlin

reified 키워드

  • reified 키워드란…? inline과 함께 쓰이며, 런타임시 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)

 

 

 

 

원래 generic 사용하면 이렇게 타입 정보를 넘겨야하지만, 위의 키워드를 사용하면

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 fun<reified T> getMessage(number: Int): T {
    return when (T::class) {
        String::class -> "The number is : $number" as T
        Int::class -> number as T
        else -> "Not string, Not Integer" as T
    }
}

요런 함수 구현이 가능함


 

 

 

 

인라인 함수가 필요한 이유

  • 인라인 함수는 본문을 그대로 복사해서 씀…뭐 런타임시 이득이 좀 있다는듯?
  • 인라인 함수를 사용해야하는 경우는
    1. 함수 코드가 짧고
    2. 람다를 인자로 받는 함수
  • 일부 람다만 인라이닝 하고싶을때는
inline fun sample(inlined: () -> Unit, noinline noInlined: () -> Unit) {
    
}

위와 같이 noinlined 코드를 써주면 된다

 

 

'개발 > Kotlin' 카테고리의 다른 글

Kotlin operator extension  (0) 2023.07.25
Kotlin flow  (0) 2023.07.25
Kotlin Infix func  (0) 2023.05.03
Retrofit to Ktor  (0) 2023.05.03
Kotlin value class  (0) 2023.02.16