4.1.5 지역 클래스

    자바처럼 코틀린에서도 함수 본문에서 클래스를 정의할 수 있다. 이런 지역 클래스는 자신을 둘러싼 코드 블록 안에서만 쓰일 수 있다.

    fun main() {
      class Point(val x: Int, val y: Int) {
        fun shift(dx: Int, dy: Int): Point = Point(x + dx, y + dy)
        override fun toString() = "($x, $y)"
      }
      val p = Point(10, 10)
      println(p.shift(-1, 3)) // (9, 13)
    }
    
    fun foo() {
      println(Point(0, 0)) // error: unresolved reference: Point
    }

    지역 함수와 비슷하게 코틀린 지역 클래스도 자신을 둘러싼 코드의 선언에 접근할 수 있다. 특히 지역 클래스는 클래스 본문 안에서 자신이 접근할 수 있는 값을 포획(capture)할 수 있고, 심지어는 변경할 수도 있다.

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