더북(TheBook)

다음 예제는 객체 식의 타입이 익명 객체 타입이며, 지역 변수나 프로퍼티의 타입도 마찬가지일 수 있음을 보여준다.

fun main() {
  val o = object {  // 익명 객체 타입이 추론됨
    val x = readLine()!!.toInt()
    val y = readLine()!!.toInt()
  }
  println(o.x + o.y) // 여기서 o 안의 x와 y에 접근할 수 있음
} 

하지만 익명 객체 타입은 지역 선언이나 비공개 선언에만 전달될 수 있다. 예를 들어 midPoint 함수를 최상위 함수로 정의하면 객체 멤버에 접근할 때 컴파일 오류가 발생한다.

fun midPoint(xRange: IntRange, yRange: IntRange) = object {
  val x = (xRange.first + xRange.last)/2
  val y = (yRange.first + yRange.last)/2
}

fun main() {
  val midPoint = midPoint(1..5, 2..6)
  // error: unresolved reference: x
  // error: unresolved reference: y
  println("${midPoint.x}, ${midPoint.y}")
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.