함수 오버로딩과 디폴트 인자를 함께 사용하는 경우, 오버로딩한 함수를 호출하면 함수 시그니처와 함수 호출이 ‘가장 가깝게’ 일치되는 함수를 호출한다. 다음 예제에서 main()에 있는 foo() 호출은 디폴트 인자 99를 사용해 첫 번째 함수를 호출하지 않고, 파라미터가 없는 두 번째 버전을 호출한다.
Overloading/OverloadedVsDefaultArg.kt
package overloadingvsdefaultargs
import atomictest.*
fun foo(n: Int = 99) = trace("foo-1-$n")
fun foo() {
trace("foo-2")
foo(14)
}
fun main() {
foo()
trace eq """
foo-2
foo-1-14
"""
}
이런 경우 foo() 호출은 항상 두 번째 foo()를 호출하기 때문에 디폴트 인자 99를 결코 활용할 수 없다.