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}") }