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처럼, 일반적인 프로퍼티가 아닌 생성자 파라미터를 사용하고 클래스 본문 안에서 프로퍼티에 그 값을 대입함으로써 해결할 수 있다.