KOTLIN · 기초 문법
위임 속성 (Delegated Properties)
by 키워드로 프로퍼티의 getter/setter를 다른 객체에 위임합니다. lazy, observable, vetoable 등 표준 위임을 제공합니다.
기초 문법고급delegated-propertylazyobservablevetoable
핵심 설명
by 키워드로 프로퍼티의 getter/setter를 다른 객체에 위임합니다. lazy, observable, vetoable 등 표준 위임을 제공합니다.
Kotlin code
import kotlin.properties.Delegates
class UserSettings {
// lazy: 첫 접근 시 초기화
val config: Map<String, String> by lazy {
println("설정 로드 중...")
mapOf("theme" to "dark", "lang" to "ko")
}
// observable: 변경 감지
var fontSize: Int by Delegates.observable(14) { _, old, new ->
println("폰트 크기: $old → $new")
}
// vetoable: 변경 거부 가능
var volume: Int by Delegates.vetoable(50) { _, _, new ->
new in 0..100 // 범위 밖이면 거부
}
}
fun main() {
val s = UserSettings()
println(s.config["theme"])
s.fontSize = 18
s.volume = 200 // 거부됨
println("Volume: ${s.volume}") // 50
}학습 팁
lazy는 기본적으로 스레드 안전합니다. 단일 스레드 환경이라면 lazy(LazyThreadSafetyMode.NONE)으로 오버헤드를 줄이세요.
주의할 점
lazy 프로퍼티는 val에만 사용 가능합니다. 변경 가능한 지연 초기화가 필요하면 lateinit var을 사용하세요.
자주 묻는 질문
위임 속성 (Delegated Properties)란 무엇인가요?
by 키워드로 프로퍼티의 getter/setter를 다른 객체에 위임합니다. lazy , observable , vetoable 등 표준 위임을 제공합니다.
위임 속성 (Delegated Properties) 학습 시 주의할 점은 무엇인가요?
lazy 프로퍼티는 val 에만 사용 가능합니다. 변경 가능한 지연 초기화가 필요하면 lateinit var 을 사용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.