더북(TheBook)

하지만 때로는 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이라는 참조는 프로퍼티가 구현되는 방법과 무관하게 항상 올바른 참조로 남을 수 있다. 다음 절에서는 커스텀 프로퍼티를 정의하는 방법을 자세히 살펴본다.

프로퍼티가 사용하는 내부 필드는 항상 캡슐화돼 있고 클래스 정의 밖에서는 이 내부 필드에 접근할 수 없다. 사실은 프로퍼티 정의 자체가 아니면 이런 내부 필드에 접근할 방법이 없다.

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