PHpullh
학습 라이브러리/Kotlin/확장 프로퍼티 (Extension Properties)

KOTLIN · 함수

확장 프로퍼티 (Extension Properties)

기존 클래스에 프로퍼티를 추가합니다. backing field가 없으므로 getter/setter를 통해 계산된 값을 반환합니다.

함수중급extension-propertygettercomputed-property

핵심 설명

기존 클래스에 프로퍼티를 추가합니다. backing field가 없으므로 getter/setter를 통해 계산된 값을 반환합니다.

Kotlin code

// 문자열 확장 프로퍼티
val String.isEmail: Boolean
    get() = matches(Regex("^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$"))

val String.wordCount: Int
    get() = trim().split("\s+".toRegex()).size

// 리스트 확장 프로퍼티
val <T> List<T>.secondOrNull: T?
    get() = if (size >= 2) this[1] else null

val List<Int>.median: Double
    get() {
        val sorted = this.sorted()
        val mid = size / 2
        return if (size % 2 == 0)
            (sorted[mid - 1] + sorted[mid]) / 2.0
        else sorted[mid].toDouble()
    }

fun main() {
    println("user@example.com".isEmail)   // true
    println("not-email".isEmail)          // false
    println("Hello Kotlin World".wordCount) // 3

    println(listOf(10, 20, 30).secondOrNull) // 20
    println(listOf(1, 3, 5, 7).median)       // 4.0
}

학습 팁

확장 프로퍼티는 자주 사용하는 계산 로직을 자연스러운 프로퍼티 접근으로 만들어 코드 가독성을 높입니다.

주의할 점

확장 프로퍼티에는 backing field(field)를 사용할 수 없습니다. 상태 저장이 필요하면 확장 함수와 외부 맵을 조합하세요.

자주 묻는 질문

확장 프로퍼티 (Extension Properties)란 무엇인가요?

기존 클래스에 프로퍼티를 추가합니다. backing field가 없으므로 getter/setter를 통해 계산된 값을 반환합니다.

확장 프로퍼티 (Extension Properties) 학습 시 주의할 점은 무엇인가요?

확장 프로퍼티에는 backing field( field )를 사용할 수 없습니다. 상태 저장이 필요하면 확장 함수와 외부 맵을 조합하세요.