[Kotlin] 3-8. 중첩 클래스와 내부 클래스

중첩 클래스와 내부 클래스

다른 클래스에 클래스를 중첩할 수 있다

class Outer {
  private val bar: Int = 1
  class Nested {
    fun foo() = 2
  }
}

val demo = Outer.Nested().foo()  // == 2

내부 클래스

inner로 지정한 클래스는 외부 클래스의 멤버에 접근할 수 있다
내부 클래스는 외부 클래스의 객체에 대한 레퍼런스 갖는다

class Outer {
  private val bar: Int = 1
  inner class Inner {
    fun foo() = bar
  }
}

val demo = Outer().Inner().foo()   // == 1

내부 클래스에서 this에 대한 모하함에 대한 것은 한정된 this식을 참고한다

익명 내부 클래스

오브젝트 식을 사용해서 익명 내부 클래스를 생성할 수 있다

window.addMoustListener(object: MouseAdapter() {
  override fun mouseClicked(e: MoustEvent) {
    // ...
  }
  override fun mouseEntered(e: MouseEvent) {
    // ...
  }
})

객체가 함수형 자바 인터페이스의 인스턴스라면, 인터페이스 타입을 접두어로 갖는 람다 식을 사용해서
익명 내부 객체를 생성할 수 있다

val listener = ActionListener { println("clicked") }