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를 통해 해결이 가능하다.

'안드로이드' 카테고리의 다른 글
| [안드로이드] ViewBinding 사용시 주의점 (0) | 2022.10.07 |
|---|---|
| [코틀린] Coroutine Flow 개념 정리 (0) | 2022.10.06 |
| [안드로이드] 안드로이드 DialogFragment() 화면 사이즈 조정 (0) | 2022.10.04 |
| [코틀린] 코틀린 - 고차함수 (1) | 2022.10.03 |
| [코틀린] 코틀린 - 빌더패턴(Builder pattern) (0) | 2022.10.02 |