더북(TheBook)

함수 오버로딩과 디폴트 인자를 함께 사용하는 경우, 오버로딩한 함수를 호출하면 함수 시그니처와 함수 호출이 ‘가장 가깝게’ 일치되는 함수를 호출한다. 다음 예제에서 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를 결코 활용할 수 없다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.