코틀린에서 변수에 대해 변화가 감지되면 이벤트를 후킹처리 할수있습니다.
다음과 같이 간단하게 숫자가 변화될때 마다 로그를 출력하는 모습입니다.
val lazyValue: String by lazy {
// TODO: SELF
"Lazy String"
}
클래스가 생성된 이후에 처음으로 lazy로 정의된것이 사용될때 초기화 된다.
초기화가 되는 시점의 값을 계속 갖고 있으며 프로그램이 종료되기전까지 그 값으로 유지된다.
var number by Delegates.observable(1) { _, old, new ->
println("number changed [$old] -> [$new]")
}
number += 1
number += 1
number += 1
number changed [1] -> [2] // 위에서 ++ 변화될때마다 출력
number changed [2] -> [3]
number changed [3] -> [4]
친절하게도 코틀린에서는 'kotlin.reflect.KProperty'안에 델리게이트 옵저버블을 지원하고 있다.
만약 프로퍼티 위임(by)을 할때 델리게이트 패턴이 적용되지 않는 선언을 시도한다면 다음과 같은 경험을 할수있다.
프로퍼티를 위임하려면 가이드에 맞게 사용해야 한다는것을 확인할수 있엇다.