반응형
Kotlin Flow와 LiveData 비교
안드로이드 개발에서 UI 데이터를 다룰 때 흔히 사용되는 두 가지 대표적인 도구가 있습니다. 바로 LiveData와 Kotlin Flow입니다. 둘 다 비동기 데이터 스트림을 처리하지만, 태생과 활용 목적이 다르기 때문에 상황에 맞는 선택이 필요합니다.
1. LiveData란?
LiveData는 안드로이드 아키텍처 컴포넌트로, 수명주기(Lifecycle)를 인식하는 데이터 홀더 클래스입니다.
private val _count = MutableLiveData<Int>(0)
val count: LiveData<Int> = _count
fun increase() {
_count.value = (_count.value ?: 0) + 1
}
특징:
- Activity/Fragment의 수명주기를 인식한다.
- UI 업데이트에 최적화되어 있다.
- 테스트가 상대적으로 불편하다.
2. Flow란?
Kotlin Flow는 Kotlin Coroutine 기반의 비동기 데이터 스트림 처리 라이브러리입니다. 데이터 흐름을 선언형으로 표현할 수 있고, 다양한 연산자를 활용할 수 있습니다.
private val _count = MutableStateFlow(0)
val count: StateFlow<Int> = _count
fun increase() {
_count.value += 1
}
특징:
- Coroutine 친화적이다.
- 다양한 연산자(map, filter 등)를 사용할 수 있다.
- 안드로이드 외 환경(서버, 데스크톱 등)에서도 활용 가능하다.
3. LiveData vs Flow 차이
| 구분 | LiveData | Flow |
|---|---|---|
| Lifecycle 인식 | 지원 | 기본적으로 지원하지 않음 |
| 비동기 처리 | 제한적 | Coroutine 기반 강력한 비동기 처리 |
| 플랫폼 의존성 | 안드로이드 전용 | Kotlin 범용 |
| 연산자 지원 | 거의 없음 | 풍부한 연산자 제공 |
4. 언제 어떤 것을 써야 할까?
- LiveData → 단순 UI 상태 관리, 안드로이드 컴포넌트와 밀접하게 연동할 때
- Flow → 복잡한 비동기 스트림 처리, 데이터 변환/조합이 필요할 때
정리: LiveData는 안드로이드 UI에 특화되어 있고, Flow는 범용적인 데이터 스트림 처리에 강력합니다. 최근에는 StateFlow와 SharedFlow가 등장하면서, 새로운 프로젝트에서는 Flow 기반 설계가 점점 더 많이 활용되고 있습니다.
반응형
'개발일기' 카테고리의 다른 글
| ViewModelScope의 특징과 활용법 (5) | 2025.08.25 |
|---|---|
| CoroutineScope와 LifecycleScope 차이 (6) | 2025.08.21 |
| StateFlow vs SharedFlow 차이와 활용법 (5) | 2025.08.19 |
| Kotlin Flow 실전 활용법 (7) | 2025.08.18 |
| Kotlin Coroutine 예외 처리 패턴 (15) | 2025.08.15 |