더북(TheBook)

내포된 클래스에 inner를 붙이면 자신을 둘러싼 외부 클래스의 현재 인스턴스에 접근할 수 있다.

class Person(val firstName: String, val familyName: String) {
  inner class Possession(val description: String) {
    fun showOwner() = println(fullName())
  }
  private fun fullName() = "$firstName $familyName"
}

fun main() {
  val person = Person("John", "Doe")
  // Possession 생성자 호출
  val wallet = person.Possession("Wallet")
  wallet.showOwner() // John Doe
}

여기서 내부(inner)2 클래스 생성자를 호출할 때 person.Possession("Wallet")처럼 외부 클래스 인스턴스를 지정해야 한다는 점에 유의하라. 다른 멤버들과 마찬가지로 내부 클래스를 가리킬 때도 this를 생략할 수 있다.

class Person(val firstName: String, val familyName: String) {
  inner class Possession(val description: String) {
    fun showOwner() = println(fullName())
  }

  // this.Possession("Wallet")과 같음
  val myWallet = Possession("Wallet")

  fun fullName() = "$firstName $familyName"
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.