Flow 와 LiveData 차이점?

2021. 11. 8. 22:56Kotlin/Android

Android 앱 개발 시에, MVVM 패턴을 통해 서버와 통신을 할 때 이러한 질문을 던질 수 있다.

MVVM 패턴이란 Model, View, ViewModel 의 계층을 나누어서 서버와의 데이터 통신을 관리하는 아키텍처 패턴이다.

일반적으로

ViewModel에서는 LiveData를, Model에서는 Flow형을 사용한다.

 

# LiveData

View에 데이터의 변경을 알리기 위해 고안된 자료형이다.

Observer 패턴으로, 감싸고 있는 값이 변경되면 View에 등록된 함수를 수행한다.

 

map이나 switchMap 함수를 사용하여 여러 리소스를 가진 MediatorLiveData를 가질 수 있다.

MutableLiveData 형으로 더욱 편리하게 감싸고 있는 데이터를 변경을 할 수 있다.

 

일반적으로 ViewModel에서 생성되며,

liveData {}로 생성할 수는 있지만, Flow형으로 초기화하고 asLiveData()로 변환하여 사용하는 것을 권장한다.

 

# Flow

https://developer.android.com/kotlin/flow?hl=ko 

Coroutine 기반으로 build되어, 여러 번 값을 순차적으로 내보낼 수 있는 자료형이다.

코루틴을 대체할 수 있으며, 비동기 작업으로 값을 하나씩 생성할 수 있는 데이터 스트림이다.

 

Flow는 일반적으로 Model쪽에 위치하면서, Room DB가 변경될 때마다 Flow를 생성 및 변환하여 LiveData에게 준다.

또 Room DB는 모든 query를 각각 하나의 Thread에서 실행하도록 하기 때문에,

Observed Flow는 감싸고 있는 데이터가 변경되었으면, 특정 Observer에게 알릴 수 있다.

 

# 참고 자료

다음은 StackOverflow 사이트의 "kotlin flow vs livedata" 라는 게시물이다.

https://stackoverflow.com/questions/58773453/kotlin-flow-vs-android-livedata#

반응형

'Kotlin > Android' 카테고리의 다른 글

OkHttp 와 Retrofit 차이  (0) 2021.11.06
Android Studio에서 SHA-1키 얻는 방법  (0) 2021.10.31
MediatorLiveData로 LiveData 병합하기  (0) 2021.10.27
LiveData 변환하기  (0) 2021.10.27
LiveData 생성하기  (0) 2021.10.26