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

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