리뉴얼 개발 중 Delegates.observable() 이란 것을 알게됨
UI처리할 때 유용할거라고
Delegates를 보고 iOS 잠깐 공부할때 델리게이트란걸 들었어서 비슷한건가 했는데 맞는듯
찾아보다가 Delegate Pattern이란걸 알게 되었는데
<aside> 💡 Delegate Pattern 어떠한 기능을 자신이 아닌 다른 객체에 위임해서 처리하는 pattern
(정의도 그렇고 찾아보니 상속과 비슷한거같은데 자세한건 다음 시간에..)
</aside>
by 키워드를 사용해서 프로퍼티를 observable 하게 만들어준다.
// Kotlinlang.org
inline fun <T> observable(
initialValue: T,
crossinline onChange: (property: KProperty<*>, oldValue: T, newValue: T) -> Unit
): ReadWriteProperty<Any?, T>
초기 value와 onChange라는 리스너를 받고있고, onChange 메서드는 value가 변경될 때 마다 호출된다.

본인은 평소에 아래와 같이 사용함
// 이벤트에 따른 버튼 활성화-비활성화 리소스 적용
private fun setBackgroundDrawable(isEnable: Boolean) {
if (isEnable) {
} else {
}
}
Delegates.observable 방식으로 바꿔보았다.
// example
private var isBtnEnable: Boolean by Delegates.observable(initialValue = false) { property, oldValue, newValue ->
binding.btnView.background = if (newValue) {
ContextCompat.getDrawable(this, R.drawable.drawable_source_1)
} else {
ContextCompat.getDrawable(this, R.drawable.drawable_source_2)
}
}
isBtnEnable = false // call listener
isBtnEnable = true // call listener
(뭔가 RxJava로 EventBus 사용하는 것 같은 느낌..?)