더북(TheBook)

지연 초기화되는 객체 선언과 달리 객체 식이 만들어내는 객체는 객체 인스턴스가 생성된 직후 바로 초기화된다. 다음 코드를 보면, o 정의에서 객체가 생성되는 시점에 이 객체의 a 프로퍼티가 초기화되므로 o.a에 접근하기 전에 x를 표시했음에도 불구하고 x의 값으로 2가 표시된다.

fun main() {
  var x = 1
  
  val o = object {
    val a = x++;
  }
  
  println("o.a = ${o.a}") // o.a = 1
  println("x = $x")       // x = 2
}

자바 익명 클래스와 달리 객체 식은 클래스 상속과 조합했을 때 더 강력해진다. 객체 식은 기존 클래스의 하위 클래스를 선언하지 않고도 기존 클래스를 약간만 변경해 기술하는 간결한 방법을 제공한다. 이에 대해서는 8장 클래스 계층 이해하기에서 살펴본다.

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