[kotlin] 코틀린 리플렉션을 이용한 함수 오버로딩 확인
코틀린에서는 함수 오버로딩을 지원하며, 동일한 이름의 함수를 여러 개 정의할 수 있습니다. 이때, 리플렉션을 사용하여 특정 클래스에 정의된 함수의 시그니처를 확인할 수 있습니다.
여기에는 KFunction::parameterTypes
속성을 이용하여 해당 함수의 매개변수 유형을 조회하는 방법을 살펴보겠습니다. 아래는 이에 대한 예제 코드입니다.
import kotlin.reflect.full.declaredMemberFunctions
import kotlin.reflect.full.functions
import kotlin.reflect.full.memberFunctions
import kotlin.reflect.jvm.javaMethod
class Sample {
fun foo() {}
fun foo(x: Int) {}
fun foo(x: String) {}
}
fun main() {
val sample = Sample::class
val declaredFunctions = sample.declaredMemberFunctions
val memberFunctions = sample.memberFunctions
val functions = sample.functions
for (function in declaredFunctions) {
println("Declared function: ${function.name} - Parameters: ${function.parameterTypes}")
}
for (function in memberFunctions) {
println("Member function: ${function.name} - Parameters: ${function.parameterTypes}")
}
for (function in functions) {
println("Function: ${function.name} - Parameters: ${function.parameterTypes}")
}
}
위 코드를 실행하면, Sample
클래스 내에 정의된 함수들과 해당 함수들의 매개변수 유형이 출력됩니다.
이렇게 리플렉션을 활용하면 프로그램 실행 중에 함수의 시그니처를 확인하고 적절한 오버로딩 전략을 수립할 수 있습니다.
더 자세한 정보는 Kotlin 공식 문서의 리플렉션 섹션을 참고하시기 바랍니다.