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}")
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.