Delegates의 observable과 vetoable을 이용하여 속성 변경을 감지하고 변경될 때 동작해야하는 작업이 필요할 때 구현할 수 있다. 즉, observe 패턴을 쉽게 구현할 수 있다.
Observable
observable은 property를 observe 한다. 이를 이용하면 property의 값이 변경될 때마다 callback을 받을 수 있다.
class PersonObservable(private val name: String) {
var alias: String by Delegates.observable("First Alias", { _, oldValue, newValue ->
println("$name 님의 Old 별명: $oldValue, New 별명: $newValue")
})
}
fun main() {
val person = PersonObservable("Hong GilDong")
person.alias = "Park JaeBum"
person.alias = "Jay Park"
}
결과
Hong GilDong 님의 Old 별명: First Alias, New 별명 Park JaeBum
Hong GilDong 님의 Old 별명: Park JaeBum, New 별명 Jay Park