읽기 전에
이 글은 정승욱 님의 액티비티 : 코드 제로라는 제목의 영상 중 ViewModel에서 Click event 처리에 대한 부분을 샘플 코드로 작성하였습니다.
함께 일하면서 익힌 코드의 일부 방향성을 글에 담고 있으며, 글 작성에 대한 동의를 받았습니다.
본문
위 영상에서 언급한 내용을 포함하고 있으나, 일부 이해하지 못할 수 있으니 그냥 간단하게 이러한 방법으로도 접근이 가능하구나 정도로만 이해하시면 좋겠습니다.
이 글에서는 View에서 ViewModel을 어떻게 호출하고 접근하는 게 좋은지를 다루기 위한 글입니다.
RxJava 또는 Flow를 활용해 Click event 처리를 stream으로 받아 처리하도록 만들어 줄 수 있습니다. 대표적인 예는 JakeWharton/RxBinding의 예가 됩니다.
RxBinding처럼 Rx 스트림을 활용하는 방법을 사용하여 작성하는 코드의 샘플입니다. 이 글에서 언급하는 코드는 Flow만을 활용하였습니다.
참고로
RxJava와 Flow를 쓴다고 해서 모두 UnitTest 가능한 형태는 아닙니다.
- RxJava의 마지막은 subscribe를 해야 동작하지만, dispose가 리턴됩니다. 이러면 이어서 테스트할 수 없습니다.
- Flow의 마지막 역시 launchIn을 해야 동작하는데, Job이 리턴됩니다. 이 역시 테스트가 불가능합니다.
테스트가 가능한 형태로 진화하려면 subscribe, launchIn을 외부의 다른 방법을 활용해야 하는데, 이는 위 영상에서 언급하고 있으니 참고하시면 되겠습니다.
이 글에서 설명하지 않는 부분
- Flow, RxJava에 대해서는 설명하지 않습니다.
- View의 캐싱에 대해서는 다루지 않습니다.
- UnitTest 가능한 형태로의 접근을 설명하지는 않습니다.
이 글에서 알아볼 내용
- View에서 ViewModel을 호출하는 방법이 아닌 ViewModel에서 처리하는 방법을 알아봅니다.
- ViewModel에서 처리할 때 Flow 활용하는 방법을 알아봅니다.
Read More