함수와 비슷하게 접근자에도 식이 본문인 형태를 사용할 수 있다.
val fullName: String get() = "$firstName $familyName"
게터에는 파라미터가 없다는 점을 기억하라. 반면 게터의 반환 타입은 (만약 반환 타입을 지정한다면) 프로퍼티의 타입과 같아야 한다.
val fullName: Any
get(): String {
// error: getter return type must be equal to the type of the property, i.e. 'Any'
return "$firstName $familyName"
}
코틀린 1.1부터는 프로퍼티와 게터 정의에서 프로퍼티의 타입을 생략하고 타입 추론에 의존하면 된다.
val fullName
get() = "$firstName $familyName" // 타입이 String으로 추론된다
앞의 코드처럼 도입한 프로퍼티의 값은 매번 fullName 프로퍼티를 읽을 때마다 다시 계산된다. firstName, familyName과 달리 fullName에는 뒷받침하는 필드(backing field)가 없기 때문에 클래스 인스턴스에서 전혀 메모리를 차지하지 않는다. 즉, 기본적으로 fullName은 프로퍼티 형태인 함수와 같다. 자바에서는 이런 경우 보통 getFullName()으로 게터 이름을 정한다. 뒷받침하는 필드와 관련한 규칙은 다음과 같다. 프로퍼티에 명시적으로 field를 사용하는 디폴트 접근자나 커스텀 접근자가 하나라도 있으면 뒷받침하는 필드가 생성된다. 불변 프로퍼티의 접근자는 읽기 접근자 하나뿐이므로 앞 예제에서 fullName은 직접 뒷받침하는 필드인 field를 참조하지 않는다는 사실을 쉽게 알 수 있다. 따라서 fullName 프로퍼티에는 뒷받침하는 필드가 없다.