LiveData 에 대한 study 하면서 MutableLiveData 클래스를 보고있는데  어쩌다보니 ObservableField 도 보게 되었습니다. LiveData 와 마찬가지로 관찰 가능한 데이터를 활용할 때 쓰이는 클래스인데 어떤 차이가 ...

[안드로이드] ObservableField, MutableLiveData 차이

 

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 차이를 인지하고,

그 상황에서 적절한걸 선택해서 쓰면 좋을것 같습니다.



 

 

[참고자료] 

블로그 - LiveData 알아보기

티스토리 - Live data 와 ObservableField 는 무엇일까?

 

 

 

 

 

0 comments: