마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

MVVM 패턴에서 event 처리 방법 질문합니다.

0 추천
https://medium.com/prnd/mvvm%EC%9D%98-viewmodel%EC%97%90%EC%84%9C-%EC%9D%B4%EB%B2%A4%ED%8A%B8%EB%A5%BC-%EC%B2%98%EB%A6%AC%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-6%EA%B0%80%EC%A7%80-31bb183a88ce

안녕하세요! 위 글을 보고 궁금한 점이 생겨 질문합니다!
왜 MVVM 패턴에서 setOnClickListener를 사용하지 않고 SingleLiveData같은 방식을 사용하는 건가요?

https://github.com/PRNDcompany/MvvmEventSample
글의 예제 소스를 보면 버튼을 클릭하면 토스트 메세지를 띄워주는데 ... 왜 setOnClickListener를 사용하지 않는건지 너무나도 궁금합니다 ㅠㅠ

구글에 여러 키워드로 검색해보았지만 ... 원하는 답이 안나오네요 ㅜ
혹시 알려주실 분 계신가요?
koownij (210 포인트) 님이 2022년 8월 26일 질문

1개의 답변

+1 추천
 
채택된 답변
예제에서 setOnClickListener를 사용하지 않는 이유는 해당 코드는 ViewModel을 사용할 때  one-off event를 어떻게 처리하는지 보여주는 데모코드이기 때문입니다. 님이 그렇게 사용하는 상황이라고 가정한 겁니다. 예를 들면, 네트워크 호출을 하다가 에러가 나서 화면에 toast를 보여줘야 한다고 생각해보시면 됩니다. 이런 상황에서 ViewModel +  LiveData을 사용하고 있다면, 해당 블로그에서 제시한 방법대로 처리를 하는 겁니다.

토픽과 관련한 구글의 공식적인 가이드는 아래 블로그에서 확인하실 수 있습니다.

https://medium.com/androiddevelopers/viewmodel-one-off-event-antipatterns-16a1da869b95

구글의 방향이 종종 바뀌기 때문에, 어쩌면 참조하신 블로그의 방법들이 더 현실적으로 적합할지도 모르겠습니다. 구글의 요점은 님이 말씀하시는 이벤트(정확히는 한번만 사용하는 one-off event 또는 one-time event)는 UI의 상태로 간주하는 것이 바람직한 방향이다. 따라서 상태값을 업데이트하는 형태로 처리해야 한다. 구글의 말대로라면 님이 참조하신 블로그의 대부분의 방식은 안티패턴에 해당합니다. 하지만 개인적으로는, 구글은 이 간단한 처리를 빙빙 돌려하게 만드는 오버엔지니어링을 하고 있다는 생각을 자꾸 하게 됩니다.

블로그에 나오신 방법들 중에서 상황에 맞는 걸 선택하시면 되구요. 추가로 한가지 더 사용하는 방법이 있는 Channel을 이용하는 것입니다. 이건 해외 커뮤니티에서 안드로이드 개발자들이 기존에 많이 사용하고 있는 방법입니다. 아래 유투브에 자세한 가이드가 있습니다.

https://www.youtube.com/watch?v=6v8iJDJdtMc
spark (226,420 포인트) 님이 2022년 8월 27일 답변
koownij님이 2022년 8월 27일 채택됨
...