[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 공식 문서의 리플렉션 섹션을 참고하시기 바랍니다.