[kotlin] 코틀린 함수의 리플렉션

코틀린은 자바와 호환성이 높은 언어로, 자바의 기능을 대부분 지원합니다. 코틀린에서는 런타임 시 함수의 이름, 매개변수, 반환값 등의 정보를 확인하고 조작할 수 있는 리플렉션(Reflection) 기능을 제공합니다. 이 기능은 코드를 동적으로 분석하거나 변경해야 하는 경우에 유용합니다.

함수의 정보 얻기

코틀린에서 함수의 정보를 얻기 위해서는 KFunction 인터페이스를 사용합니다.

예를 들어, 다음과 같이 함수의 이름과 매개변수 정보를 출력할 수 있습니다.

import kotlin.reflect.KFunction
import kotlin.reflect.full.functions

fun main() {
    val function: KFunction<*> = ::sampleFunction
    println("Function name: ${function.name}")
    println("Parameters: ${function.parameters}")
}

fun sampleFunction(name: String, age: Int) {
    // function implementation
}

위 코드는 sampleFunction이라는 함수의 이름과 매개변수 정보를 출력합니다.

함수 호출

리플렉션을 사용하면 런타임 시에 함수를 호출할 수도 있습니다.

import kotlin.reflect.KFunction
import kotlin.reflect.full.functions

fun main() {
    val function: KFunction<*> = ::sampleFunction
    function.call("John", 30)
}

fun sampleFunction(name: String, age: Int) {
    println("Name: $name, Age: $age")
}

위 코드에서 function.call("John", 30)sampleFunction을 호출하고 매개변수로 “John”과 30을 전달합니다.

주의사항

리플렉션은 런타임 성능에 영향을 줄 수 있으며, 컴파일 타임에 타입 안전성이 검증되지 않는 단점이 있습니다. 따라서 리플렉션을 사용할 때에는 이러한 측면을 고려해야 합니다.

코틀린의 리플렉션 기능을 사용하면 함수와 그에 대한 정보를 동적으로 다룰 수 있어서 다양한 활용 가능성이 있습니다. 하지만 사용 시에는 성능과 타입 안전성에 주의해야 합니다.

참고 자료