Kotlin reified 키워드

JVM의 사양에 따라 제네릭 함수의 형태는 일반적으로 실행시에는 손실되지만 Kotlin에서는 inlinereified을 이용하는 것으로, 실행시에도 제네릭 함수의 형태를 참조하는 것이 가능하다.

타입의 구현(reified)

Kotlin에서 reified는 일반적으로 inline 함수와 함께 사용되는 특별한 형식 매개변수이다.

JVM의 사양에 따라 일반적으로 제네릭 타입 매개변수는 런타임에 소거된다. 이는 Java의 타입 소거와 관련이 있다. 즉, 제네릭 타입이 실제로 어떤 타입인지에 대한 정보는 런타임에서는 사용할 수 없다. 하지만 Kotlin의 reified 키워드를 사용하면 이러한 제약을 우회할 수 있다. 즉, 실행시에도 제네릭 함수의 형태를 참조하는 것이 가능하다.

reified 키워드는 inline 함수 내에서 제네릭 타입 매개변수를 실제로 알 수 있도록 한다. 따라서 inline 함수 내에서 제네릭 타입에 대한 런타임 정보를 사용할 수 있게 된다.

예를 들어, 다음은 reified 키워드를 사용하여 제네릭 타입을 실제로 알아내고 그 타입에 대한 런타임 검사를 수행하는 간단한 예시이다.

inline fun <reified T> exampleFunction(item: T) {
    if (item is String) {
        println("It's a String!")
    } else {
        println("It's not a String!")
    }
}

fun main() {
    exampleFunction("Hello") // Output: It's a String!
    exampleFunction(5) // Output: It's not a String!
}

위의 예제에서 exampleFunction은 제네릭 타입 T를 가지고 있으며, reified 키워드로 표시되어 있다. 이제 함수 내에서 T에 대한 런타임 정보를 사용할 수 있다. 따라서 item is String과 같은 런타임 타입 검사를 수행할 수 있다.

reified 키워드는 주로 타입 정보가 필요한 인라인 함수와 함께 사용되며, 타입 정보를 런타임에 사용해야 할 때 유용하다.




최종 수정 : 2021-09-26