더북(TheBook)

객체 인스턴스를 디폴트 인자로 전달하는 경우(다음 예제의 g() 함수에서 da), g()를 호출할 때마다 같은 인스턴스가 반복해서 전달된다. 디폴트 인자로 함수 호출이나 생성자 호출 등을 사용하는 경우(다음 예제의 h() 함수에서 DefaultArg()), 함수를 호출할 때마다 해당 객체의 새 인스턴스가 생기거나 디폴트 인자에서 호출하는 함수가 호출된다.

NamedAndDefaultArgs/Evaluation.kt

package namedanddefault

class DefaultArg
val da = DefaultArg()

fun g(d: DefaultArg = da) = println(d)

fun h(d: DefaultArg = DefaultArg()) =
  println(d)

fun main() {
  g()
  g()
  h()
  h()
}

샘플 출력

namedanddefault.DefaultArg@7440e464
namedanddefault.DefaultArg@7440e464
namedanddefault.DefaultArg@49476842
namedanddefault.DefaultArg@78308db1

g() 호출은 똑같은 객체 주소를 출력한다. 두 h() 호출에서 출력된 두 DefaultArg 객체의 주소는 서로 다르다. 따라서 이 둘이 다른 객체임을 알 수 있다.

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