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

Repository와 Flow

0 추천
MVVM 패턴을 이용해서 구현중

Repository에서 Flow라는 것을 알게되어 사용예정할 예정이었습니다.

그런데 생각을 해보니 제가 만들고자하는 기능이

DB에서 값을 불러오는게 아니라,

버튼을 누르면 화면상의 데이터들을 그냥 DB에 저장만 하는것이라..

Repository에 Flow가 필요한지 의문이 생겼습니다

Flow가 보니 코루틴에서 반응형 프로그래밍을 가능케해주는거라고 하더라구요,.

아무튼 이것을 이용해서 DB의 데이터를 계속해서 가져(?)온다고 하는데..

제 경우에는 말했다시피 그냥 저장만 누르는거라 Flow가 데이터를 생성해서 발행할 필요가 없습니다.

그럼 Flow는 단순 필요가 없겟죠?

 
지금은 Repository에 LiveData를 두고 ViewModel의 LiveData가 이것을 참조하고 있습니다.

근데 Repository의 LiveData도 없애고 ViewModel의 LiveData만으로 관찰하게하고

Repository에는 순수 List같은 타입만 두고 아이템을 전달해 추가/삭제하고

최종적으로 이 리스트를 DB에 저장할 예정인데

이렇게하면 될까요?
codeslave (3,940 포인트) 님이 2022년 5월 6일 질문

1개의 답변

0 추천
님의 경우는 Flow를 굳이 사용을 하지 않으셔도 됩니다. 개발자들이 Flow를 선호하는 이유는 님이 말하는 RxJava에서 제공하는 stream이 Flow로 아주 쉽게 구현되기 때문인데요, LiveData는 안드로이드 SDK레벨의 API이지만, Flow는 Kotlin 랭귀지 레벨의 기능입니다. 따라서 LiveData보다는 시스템에 덜 의존적이게 됩니다. 예를 들면,  Multiplatform Mobile의 경우는 LiveData와 Flow 중에 Flow가 당연히 선호되겠죠.

그리고 님의 경우는 LiveData도 필요가 없어 보입니다. 그냥 suspend function으로 결과만 리턴해주면 될 것 같습니다. 굳이 필요없는 코드를 가지고 있을 필요가 없으므로 가능하면 LiveData도 제거하시기 바랍니다.
spark (227,470 포인트) 님이 2022년 5월 6일 답변
감사합니다.
그런데 LiveData 마저 필요없다는건 왜인가요?
저의 경우 버튼을 누르면 아이템을 추가하는데, LiveData를 관찰함으로써 변화가 생기면 새 List를 반환해서 리사이클러뷰를 업데이트합니다.

그런데 LiveData의 observe를 사용하지않으면 어떻게 관찰하나요?
"버튼을 누르면 아이템을 추가하는데, LiveData를 관찰함으로써 변화가 생기면 새 List를 반환해서 리사이클러뷰를 업데이트합니다."
이 부분은 Flow를 사용하는 이유와 같습니다. LiveData나 Flow나 observer 패턴에서 나온 것이라고 보시면 됩니다. 위에서 말씀드린 점에서  차이들이 있구요.  Repository와 같은 도메인/데이터 레이어의 경우는 안드로이드 시스템에 독립적인 Flow가 좀 더 어울려 보입니다. RoomDB가 Flow도 바로 지원하기 때문에 변경을 원하시면 그렇게 복잡하지는 않을 겁니다.
...