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 프로퍼티 위임은 getValue와 setValue 모두 필요합니다. val이면 getValue만 있으면 됩니다.
자주 묻는 질문
프로퍼티 위임 (Custom Delegation)란 무엇인가요?
커스텀 프로퍼티 위임을 구현하여 프로퍼티 접근 로직을 재사용합니다. getValue / setValue 연산자를 정의합니다.
프로퍼티 위임 (Custom Delegation) 학습 시 주의할 점은 무엇인가요?
var 프로퍼티 위임은 getValue 와 setValue 모두 필요합니다. val 이면 getValue 만 있으면 됩니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.