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

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