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