코틀린에서 한정시킨(this-qualified) this 표현식은 클래스 내부에서 중첩된 클래스 또는 확장 함수가 존재할 때, 어떤 클래스의 this를 참조해야 하는지를 명시적으로 지정하는 방법이다.
일반적으로 중첩된 클래스나 확장 함수 내에서 this를 사용하면 가장 안쪽의 현재 클래스를 참조합니다. 하지만 때로는 바깥쪽 클래스의 this를 참조해야 하는 상황이 발생할 수 있다.
이 때 한정시킨 this 표현식을 사용하여 명시적으로 바깥쪽 클래스의 this를 참조할 수 있다.
한정시킨 this 표현식은 다음과 같은 형식을 가진다.
@labelName.this
여기서 labelName
은 한정시킨 this 표현식을 사용할 때의 라벨 이름으로, 해당 라벨을 가지는 클래스의 this를 참조한다.
이 라벨은 클래스나 함수에 부여되는 이름이며, 중첩된 클래스의 경우 중첩 클래스의 이름을 사용하면 된다.
아래 코드에서 Inner 클래스 내부의 printNames() 함수에서 this@Outer는 Outer 클래스의 this를 참조하고, this@Inner는 Inner 클래스 자체를 참조한다.
이렇게 한정시킨 this 표현식을 사용하여 클래스 간에 명확하게 this를 지정할 수 있다.
class Outer {
val outerName = "Outer Class"
inner class Inner {
val innerName = "Inner Class"
fun printNames() {
println(this@Outer.outerName) // Outer Class
println(this@Inner.innerName) // Inner Class
}
}
}