LiveData 에 대한 study 하면서 MutableLiveData 클래스를 보고있는데
어쩌다보니 ObservableField 도 보게 되었습니다.
LiveData 와 마찬가지로 관찰 가능한 데이터를 활용할 때 쓰이는 클래스인데
어떤 차이가 있는지 정리하면 좋을 것 같아서 간단하게 적어보려고 합니다.
1. MutableLiveData : Lifecycle
observableField 와 mutableLiveData 를 사용할 때를 잠깐 살펴보자면...
데이터를 Set
observableFieldEx.set(1)
mutableLiveDataEx.postValue(1)
옵저버 패턴, 데이터 알림받음
viewModel.observableFieldEx.addOnPropertyChangedCallback(object : Observable.OnPropertyChangedCallback() {
override fun onPropertyChanged(sender: Observable?, propertyId: Int) {
// TODO : 데이터 업데이트 처리
}
})
viewModel.mutableLiveDataEx.observe(this) { value ->
// TODO : 데이터 업데이트 처리
}
비슷하지만 LiveData 에서는 원하는 view 와 lifecycle 를 연결해주는 걸 확인할 수 있습니다.
binding.lifecycleOwner = this // Activity 생명주기 연결
2. ObservableField, MutableLiveData 차이
ObservableField, MutableLiveData 두 클래스 모두 옵저버 패턴을 가지면서 Observer 를 통해
최신 데이터에 대한 알림을 받거나 상태 변경에 대한 소식을 받을 수 있습니다.
단, ObservableField 와 달리 MutableLiveData 는 생명주기를 인식한다는 차이를 가집니다.
아래와 같이 MutableLiveData 를 사용하기 위해서 생명주기를 등록해줘야 합니다.
3. MutableLiveData 생명주기
생명 주기를 가진 LiveData 는 활성화/비활성화 상태를 가집니다.
Activity 가 onStart / onResume 상태에서는 활성화, onStop 상태에서는 비활성화가 됩니다.
4. ObservableField, MutableLiveData 어떤걸 사용해야할까?
viewModel + LiveData 조합을 사용하는게 좋지 않을까 싶어요.
생명주기를 가지는 LiveData 는 아래와 같은 장점을 가지고 있습니다.
메모리 누수 없음
>> 관찰자는 Lifecycle 객체에 결합되어 있으며 연결된 수명 주기가 끝나면 자동으로 삭제
중지된 활동으로 인한 비정상 종료 없음
>> 비활성화 상태에서 LiveData 이벤트를 받지 않습니다.
그런데 LiveData 의 장점도 명확하고 확실히 상위호환인 것도 맞는거 같은데,
View lifecycle 과 상관없이 항상 동작시켜야하는 상황도 있지 않을까요..?
상황에 따라 더 적절한 방법은 바뀔 수 있을거같아요.
하나만 고집하기보다는 ObservableField, MutableLiveData 차이를 인지하고,
그 상황에서 적절한걸 선택해서 쓰면 좋을것 같습니다.
[참고자료]
티스토리 - Live data 와 ObservableField 는 무엇일까?
0 comments: