LiveData는 LifeCycle내에서 관찰 할 수 있는 데이터 홀더 클래스이다.

Observer, LifecycleOwner와 쌍으로 추가 할 수 있다. Observer에는 래핑 된 데이터의 수정에 대해 알림을 받는다. 단! LifecycleOwner상태가 Lifecycle.State.STARTED or Lifecycle.State.RESUMED 일 때 받을 수 있다. observeForever는 항상 활성 상태로 간주하여 항상 알림을 받을 수 있으며 수동으로 removeObserver로 옵저버를 제거할 수 있다. Livecycle에 추가 된 관찰자는 Lifecycle.State.DESTROYED 상태로 이동되면 옵저버가 즉시 구독이 취소되므로 메모리 누수에 대해 걱정할 필요가 없다는 장점을 가지고 있다. LiveData는 ViewModel의 데이터 필드를 보유하도록 설계되어 있으니 참고하자.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c77fbc00-39ad-471d-87d2-95c35be06d13/_2021-02-10__10.34.58.png

LiveData를 사용 시 장점

<aside> 💡 LiveData가 Lifecycle을 어떻게 알까?

</aside>

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/afd23392-3d9e-47d7-978f-7db3a789f1b1/_2021-02-10__11.04.28.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/22b34f7d-a717-422b-9afe-327a8dbb03a3/_2021-02-10__11.01.36.png

LifecycleOwner는 SAM이며, 이를 Activity 또는 Fragment에서 이를 상속하고 있다.

즉, LiveData의 observe함수를 이용해 onwer와 observer를 등록해 Activity or Fragment의 변수로써 사용한다면 각 화면 별 생명주기에 따라 LiveData는 자신의 임무를 수행한다!

viewModel.message.observe(LifecycleOwner등록, Observer {
    /* .. 수행 .. */
})