Introduction
- LiveData : 일반적으로 데이터 전송을 위한 용도로 사용됩니다.
- Flow : 데이터를 전송하고 비동기 작업을 수행하는 기능이 있습니다.
Flow
- 코루틴 이전에 대부분의 개발자는 비동기 처리를 위해 RxJava를 사용했습니다. 이후에 코루틴의 Flow API가 출시되었고, flow는 순차적으로 실행되는 데이터 스트림을 비동기 적으로 처리할 수 있는 특징이 있어, Rxjava의 대안으로 떠올랐습니다.
Different between livedata & flow
- LiveData : 수명주기 문제를 처리하기 위해 번거롭지 않게 데이터를 관찰하는 데 사용됩니다.
- Flow : 지속적인 데이터 통합에 사용되며 비동기 프로그래밍에도 단순화되었습니다.
- Flow도 LiveData와 마찬가지로 Room에서 반환 값으로 사용 가능하고 데이터베이스를 observing 가능합니다.
이 두 개를 함께 사용시 이점.
- Flow를 LiveData로 변경하는 방법으로는 1. asLiveData() 2. liveData 빌더를 사용하는 방법이 있습니다.
val users: LiveData<List<User>> = repository.getAllUsersFlow().asLiveData()
val users: LiveData<List<User>> = liveData {
// some additional work
repository.getAllUsersFlow()
}
LiveData와 Flow는 서로를 보완하는 역할을 합니다.
- LiveData는 구성 변경시에 안정성을 제공하고 최신 데이터를 View로 전달하는 역할을 합니다.
- Flow는 Data 레이어와 긴밀하게 작동하여 데이터를 수집 및 처리하여 서로 다른 코루틴 범위에서 작업을 실행합니다.
- 그래서 ViewModel과 View사이의 상호작용은 LiveData가, 더 깊은 레이어와 스레딩과 같은 더 복잡한 처리는 Flow가 책임을 지는 역할을 하게 됩니다.