더북(TheBook)

4.4.3 객체 식

코틀린은 명시적인 선언 없이 객체를 바로 생성할 수 있는 특별한 식을 제공한다. 객체 식(object expression)은 자바 익명 클래스(anonymous class)와 아주 비슷하다. 다음 코드를 보자.

fun main() {
  fun midPoint(xRange: IntRange, yRange: IntRange) = object {
    val x = (xRange.first + xRange.last)/2
    val y = (yRange.first + yRange.last)/2
  }
  
  val midPoint = midPoint(1..5, 2..6)
  
  println("${midPoint.x}, ${midPoint.y}") // (3, 4)
}

객체 식은 이름이 없는 객체 정의처럼 보인다. 그리고 객체 식도 식이므로 앞의 예제처럼 객체 식이 만들어내는 값을 변수에 대입할 수 있다. 클래스나 객체 식과 달리 객체를 함수 안에 정의할 수는 없다.

fun printMiddle(xRange: IntRange, yRange: IntRange) {
  // error: named object 'MidPoint' is a singleton and cannot be local. Try to use anonymous object instead
  object MidPoint {
    val x = (xRange.first + xRange.last)/2
    val y = (yRange.first + yRange.last)/2
  }
  
  println("${MidPoint.x}, ${MidPoint.y}")
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.