안드로이드

[안드로이드] LiveData vs Flow 차이점

이손안나 2022. 10. 5. 23:29
mvvm 패턴을 설계할 때 viewmodel에서 사용되는 관찰 가능한 데이터로써 ACC에서 제공하는 livedata를 사용.
이때, 코루틴에서 지원하는 flow가 존재한다.

💡 LiveData ?

- 관찰가능한 데이터 타입으로 ACC의 viewmodel이나 databinding과 호환되어 mvvm패턴을 구현할 때 사용된다.

- retrofit 이나 room에서도 지원하기 때문에 data layer에서 사용 가능.

 

장점 

  • 안드로이드의 수명주기를 인식
  • ui를 갱신하면 메모리 누수가 없고 앱이 튕기는 일 방지 가능.

단점

  • 비동기 데이터 스트림 지원하지 않음( main thread에서만 관찰 됨)
  • data layer, domain layer 에서 사용하기 부적합 -> work thread에서 처리해야 성능이 유리.

💡 Flow ?

- 관찰가능한 데이터 타입과 동시에 비동기 데이터 스트림을 지원한다.

 

단점 

  • 생명주기를 스스로 알 수 없다.
  • 상태 또는 값이 없다.

 

❗️ LiveData + Flow

- retrofit 과 room이 코루틴을 지원한다.

- repository 에서 flow로 collect 할 수 있다.

- flow를 asLiveData()를 통해 livedata로 변환 가능하다.

 

 

💡 StateFlow ?

- 항상 값을 갖고 있고 오직 하나의 값을 갖는다.

- 값이 업데이트 된 경우에만 반환한다.

- 중복 리소스 요청을 방지한다.

 

Flow 의 생명주기를 알 수 없다는 문제를 LifeCycleScope를 통해 해결이 가능하다.