PHpullh
학습 라이브러리/Kotlin/위임 속성 (Delegated Properties)

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 을 사용하세요.