본문 바로가기
안드로이드 공부 노트

[Android] LiveData와 Flow 차이점 간단하게 알아보기 (LiveData vs Flow)

by 지게요 2024. 10. 5.
728x90
반응형

이번 공부 노트는 안드로이드에서의 비동기 개발 시 필수적으로 들어가는 Flow, LiveData 차이점에 대해 적어보겠다.

# LiveData와 Flow 차이점

1. 플랫폼 독립성

- Flow : Kotlin 코루틴 기반의 라이브러리로, Android에 종속되지 않고 어디서든 사용할 수 있다.

- LiveData : Android에 특화된 라이브러리로 Android 프레임워크에 종속적이기 때문에 안드로이드 생명주기(Lifecycle)와 깊이 연관되어 있다.

2. 생명주기 인식

- Flow : 생명주기를 인식하지 않는다. 이는 Flow를 사용하려면 수동으로 생명주기를 관리하거나 lifecycleScope와 같은 코루틴 스코프를 사용해 생명주기에 맞게 구독을 제어해야 한다.

- LiveData : Android 생명주기를 자동으로 인식한다. 즉, Activity Fragment가 활성 상태일 때만 데이터를 구독한다.

3. Cold vs Hot Stream

- Flow :  Cold Stream이다. 즉 구독자가 생기기 전에는 아무런 데이터도 발생하지 않으며 구독을 시작하는 순간부터 데이터를 방출한다.

- LiveData : Hot Steram이다. 즉 구독자가 없더라도 데이터는 계속 유지되고 구독자가 생기면 그 시점의 최신 데이터를 즉시 전달 한다.

4. 에러처리

Flow :  try-catch 블록이나 onEach, catch와 같은 연산자를 사용해 에러를 쉽게 처리할 수 있다.

LiveData : 에러 처리를 위한 내장 API가 없으므로 에러를 직접 관리해야 한다.

5. 연산자의 다양성

Flow :  map, filter, flatMap, combine, zip, debounce 등 다양한 연산자를 제공

LiveData : 변환함수 (map, switchMap)가 제한적이다.

# 차이점 요약

  Flow LiveData
플랫폼 Kotlin 전반에서 사용 가능 (Android 종속 X) Android 전용
생명주기 인식 생명주기 인식 없음 (직접 관리 필요) Android 생명주기 인식 자동 관리
데이터 스트림 Cold Stream Hot Stream
에러 처리 catch 등의 연산자로 에러 처리 가능 별도의 에러 처리 메커니즘 없음
연산자 map, filter 등 다양한 연산자 제공 제한적(map, switchMap 등 일부 제공)

# 언제 Flow를 사용하고 언제 LiveData를 사용해야 할까?

## Flow

- 복잡한 비동기 처리 및 연산이 필요한 경우 (다양한 연산자)

- 네트워크 통신, 데이터베이스 작업 등에서 데이터 흐름을 제어해야 할 때 (생명주기 인식)

## LiveData

- 라이프사이클 관리를 신경 쓰기 싫을 때 (생명주기 인식)

- 단순한 데이터 처리 및 UI 갱신이 필요할 때


공부하기 전에는 언제 Flow를 사용해야 하는 정확히 구분이 가지 않았는데 이렇게 정리해놓고 보니 조금은 구분이 가능해진 것 같다!

 

 

반응형