Android MVVM : Lifecycle 감지하기

Activity/Fragment 와 ViewModel 를 분리하고자 하더라도 몇몇 특수한 경우에 대비하는 코드가 필요한데 오늘은 그중에서 Lifecycle 감지에 대해 알아보도록 하겠습니다.

예를 들면, 채팅화면에서 메세지를 쓰다가 전송하기 전에 화면을 닫은 경우 메세지를 특정 영역에 저장하였다가 다시 채팅화면으로 돌아온 경우 마지막 쓰다만 메세지를 보여줘야하는 경우가 필요합니다. 이럴 경우 onDestroy 콜백을 받아서 처리해야 합니다.

위의 콜백을 받도록 하기 위해 Lifecycle 진입시 콜백을 호출하는 인터페이스를 만들어 ViewModel 이 Register, Observing 를 하도록 하는 방법 구현하도록 할 것입니다.

Lifecycle 진입시 콜백 호출하도록 하기

Activity/Fragment 에서 ViewModel의 Lifecycle 과 관련된 함수를 직접 호출하는 방식이 있습니다.

위처럼 LifecycleOwner/Register/Notifier 를 정의하고 구현하는 방식입니다. 이 방식은 AAC 의 LifecycleObserver 와 Provider 를 간단한 방식으로 구현한 것입니다.

위의 방식은 Event 를 받아 처리하는 코드가 많아질 때 가독성이 좋지 않기 때문에 RxJava 를 이용해서 바꿔보도록 하겠습니다.

RxJava 를 이용해서 Lifecycle 콜백 처리하기

RxJava 로 구현한 경우 기초 코드는 위의 방법보다 다소 많습니다.

ViewModel 에서는 이전의 구현 방식보다는 좀 더 자유도가 있는 구현을 할 수가 있습니다.

종합

위의 구현은 기존의 AAC 의 LifecycleOwner, RxLifecycle 과 매우 유사한 형태의 구현이 됩니다. 기존의 알려진 구현 방식들이 MVVM 에서 명시적인 Lifecycle 을 분리시킬 수도록 할 수 있고 이는 Activity 와 ViewModel 간 독립성을 얻을 수 있습니다.

다음 포스팅에서는 현재까지의 구현을 통해 다른 모습으로 MVVM 을 활용할 수 있는 예시를 공유하도록 하겠습니다.