하지만 때로는 this가 꼭 필요한 경우도 있다. 예를 들어 어떤 클래스의 프로퍼티와 메서드 파라미터 이름이 같은 경우, 이 둘을 구분하기 위해 프로퍼티 이름 앞에 this를 써야 한다.
class Person { var firstName: String = "" var familyName: String = "" fun setName(firstName: String, familyName: String) { this.firstName = firstName this.familyName = familyName } }
자바 vs. 코틀린 자바 필드와 달리, 코틀린에서는 클라이언트 코드를 바꾸지 않아도 원하는 대로 프로퍼티의 구현을 바꿀 수 있기 때문에(예를 들어 커스텀 게터나 세터를 추가해도 클라이언트 소스코드를 바꿀 필요가 없다) 코틀린 프로퍼티는 캡슐화(encapsulation)에 위배되지 않는다. 즉, firstName이라는 참조는 프로퍼티가 구현되는 방법과 무관하게 항상 올바른 참조로 남을 수 있다. 다음 절에서는 커스텀 프로퍼티를 정의하는 방법을 자세히 살펴본다.
프로퍼티가 사용하는 내부 필드는 항상 캡슐화돼 있고 클래스 정의 밖에서는 이 내부 필드에 접근할 수 없다. 사실은 프로퍼티 정의 자체가 아니면 이런 내부 필드에 접근할 방법이 없다.