더북(TheBook)

일반적으로 this는 항상 가장 내부의 클래스 인스턴스를 가리킨다. 따라서 내부 클래스 본문에서 this는 내부 클래스 자신을 가리킨다. 내부 클래스 본문에서 외부 클래스 인스턴스를 가리켜야 한다면 한정시킨(qualified) this 식을 사용해야 한다.

class Person(val firstName: String, val familyName: String) {
  inner class Possession(val description: String) {
    fun getOwner() = this@Person
  }
}

한정시킨 this 식에서 @ 기호 다음에 오는 식별자는 외부 클래스의 이름이다.

자바 vs. 코틀린 코틀린의 내포된 클래스와 자바의 내포된 클래스는 아주 비슷하다. 주된 차이는 코틀린 내부 클래스 앞에 inner 변경자가 붙는다는 점이다. 자바 클래스는 디폴트로 내부 클래스이며, 내부 클래스가 외부 클래스 인스턴스와 연관되길 원하지 않으면 명시적으로 static을 붙여야 한다. 반면 코틀린의 (inner가 없는) 내포된 클래스는 외부 클래스 인스턴스와 연관되지 않는다. 따라서 다음 코틀린 코드는

class Outer {
  inner class Inner
  
  class Nested
}

다음 자바 코드와 같다.

class Outer {
  public class Inner {
  
  }
  
  public class class Nested {
  
  }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.