Room 및 Flow 소개 | Android Developers
Room DB를 사용하면서 레퍼런스를 읽던 중, Flow 사용을 강력히 권고하는 내용을 보게 되었다.
DAO가 데이터베이스에서 데이터를 지속적으로 내보낼 수 있는 Coroutine Flow(종종 Flow라고 간략하게 적음)이라는 Kotlin 기능을 활용하세요.
Android에서는 DB 내 데이터에 변경 사항이 생겼을 때 동적으로 반영해서 UI에 표현할 수 없다. 즉, 변경 사항을 확인하려면 앱을 재구동해야만 했다. 그래서 DB로부터 자동으로 최신 데이터를 push 해주는 Flow를 사용하라고 권고된다.
dao.getAllNotes(): Flow<List<Note>>
이렇게 작성 시 Room이 내부적으로 감시하며
자동으로 Flow 스트림을 통해 최신 데이터를 보내준다. 즉, UI에서 갱신 함수를 따로 호출할 필요가 없다!
job = noteUseCases.getAllNotes(order)
.onEach { notes ->
_noteState.value = noteState.value.copy(notes = notes)
}.launchIn(viewModelScope)