더북(TheBook)
import java.util.Date

class Person(name: String) {
  var lastChanged: Date? = null
    private set // Person 클래스 밖에서는 변경할 수 없다
  
  var name: String = name
    set(value) {
      lastChanged = Date()
      field = value
    }
}

자바 vs. 코틀린 JVM의 관점에서 볼 때 코틀린 프로퍼티는 일반적으로 비공개 프로퍼티에 의해 뒷받침되는 한두 개의 접근자나 메서드(getFullName()setFullName()처럼)에 대응된다. 이들 메서드 자체는 코틀린 코드에서 호출할 수 없지만 자바 클래스에서는 이런 메서드를 호출할 수 있으며, 이런 점이 자바/코틀린 상호 운용성에서 가장 중요한 부분이다. 12장 자바 상호 운용성에서 이 주제를 더 자세히 다룬다. 반면 비공개 프로퍼티는 자신이 포함된 클래스 밖에서 사용할 수 없기 때문에 기본적으로 아무 접근자 메서드도 생성되지 않는다. 이런 비공개 프로퍼티에 대한 접근은 직접 필드에 접근함으로써 최적화된다.

lateinit 프로퍼티의 경우 항상 자동으로 접근자가 생성되기 때문에 프로그래머가 직접 커스텀 접근자를 정의할 수 없다. 그리고 주생성자 파라미터로 선언된 프로퍼티에 대한 접근자도 지원하지 않는다. 하지만 이 문제는 앞에서 본 age처럼, 일반적인 프로퍼티가 아닌 생성자 파라미터를 사용하고 클래스 본문 안에서 프로퍼티에 그 값을 대입함으로써 해결할 수 있다.

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