더북(TheBook)

여기서 midPoint() 함수의 타입은 객체 식에 해당하는 익명 객체 타입이 아니라 객체 식에 지정된 상위 타입이 된다. 하지만 예제 객체 식에는 상위 타입을 명시하지 않았기 때문에 Any를 상위 타입으로 가정한다. 그래서 midPoint.x 참조에서 x를 찾을 수 없는 것이다.

지역 함수나 클래스와 마찬가지로 객체 식도 자신을 둘러싼 코드 영역의 변수를 포획할 수 있다. 이렇게 포획한 가변 변수를 객체 본문에서 변경할 수 있다. 컴파일러는 지역 클래스와 비슷하게 데이터를 공유하기 위해 필요한 래퍼를 생성해준다.

fun main() {
  var x = 1
  
  val o = object {
    fun change() {
      x = 2
    }
  }
  
  o.change()
  println(x) // 2
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.