PHpullh
학습 라이브러리/Kotlin/프로퍼티 위임 (Custom Delegation)

KOTLIN · 객체지향

프로퍼티 위임 (Custom Delegation)

커스텀 프로퍼티 위임을 구현하여 프로퍼티 접근 로직을 재사용합니다. getValue/setValue 연산자를 정의합니다.

객체지향고급property-delegationgetValuesetValuecustom-delegate

핵심 설명

커스텀 프로퍼티 위임을 구현하여 프로퍼티 접근 로직을 재사용합니다. getValue/setValue 연산자를 정의합니다.

Kotlin code

import kotlin.reflect.KProperty

class Trimmed {
    private var value = ""

    operator fun getValue(thisRef: Any?, property: KProperty<*>) = value
    operator fun setValue(thisRef: Any?, property: KProperty<*>, newValue: String) {
        value = newValue.trim()
        println("${property.name} 설정: '$value'")
    }
}

class Audited<T>(private var value: T) {
    private val history = mutableListOf<T>()

    operator fun getValue(thisRef: Any?, property: KProperty<*>): T = value
    operator fun setValue(thisRef: Any?, property: KProperty<*>, newValue: T) {
        history.add(value)
        value = newValue
    }
    fun getHistory(): List<T> = history
}

class UserForm {
    var name: String by Trimmed()
    var email: String by Trimmed()
    var status: String by Audited("DRAFT")
}

fun main() {
    val form = UserForm()
    form.name = "  김철수  "
    form.email = " kim@test.com "
    form.status = "REVIEW"
    form.status = "APPROVED"
    println("이름: ${form.name}, 이메일: ${form.email}")
}

학습 팁

커스텀 위임으로 검증, 로깅, 캐싱, 포맷팅 등의 횡단 관심사를 프로퍼티 수준에서 깔끔하게 처리할 수 있습니다.

주의할 점

var 프로퍼티 위임은 getValuesetValue 모두 필요합니다. val이면 getValue만 있으면 됩니다.

자주 묻는 질문

프로퍼티 위임 (Custom Delegation)란 무엇인가요?

커스텀 프로퍼티 위임을 구현하여 프로퍼티 접근 로직을 재사용합니다. getValue / setValue 연산자를 정의합니다.

프로퍼티 위임 (Custom Delegation) 학습 시 주의할 점은 무엇인가요?

var 프로퍼티 위임은 getValue 와 setValue 모두 필요합니다. val 이면 getValue 만 있으면 됩니다.