코틀린에는 확장 함수와 비슷하게 확장 프로퍼티가 있습니다

 

val String.lastChar: Char
    get() = this[length - 1]

만드는 방법은 확장 함수와 비슷합니다. 메소드 이름 앞에 receiver type을 적어줘야 합니다.

실제 인스턴스에 필드를 추가하는건 아니고, 그냥 syntatic sugar입니다. 따라서 backing field를 가질 수 없고, getter를 필수적으로 만들어줘야 합니다.

 

var StringBuilder.lastChar: Char
    get() = this[length - 1]
    set(value) {
        setCharAt(length - 1, value)
    }

StringBuilder의 맨 마지막 글자를 바꾸는 setter를 정의한 예시입니다.

 

코틀린 stdlib 예시

public val <T> List<T>.lastIndex: Int
    get() = this.size - 1

 

Reference

- https://kotlinlang.org/docs/extensions.html#extension-properties

반응형