개발일기

Kotlin Flow vs LiveData - 무엇을 언제 써야 할까?

뱅우 2025. 8. 6. 11:14
반응형

Kotlin Flow vs LiveData - 무엇을 언제 써야 할까?

안드로이드 개발을 하면서 데이터를 UI에 반영할 때 가장 많이 쓰는 두 가지가 LiveDataKotlin Flow입니다.

하지만 두 기술 모두 비슷한 역할을 하기에 “언제 어떤 걸 써야 하지?” 헷갈리는 경우가 많죠.

이 글에서는 LiveData와 Flow의 차이점, 장단점, 선택 기준까지 실전 위주로 정리해드립니다.


📌 기본 개념 비교

항목 LiveData Kotlin Flow
라이프사이클 인식 O X (따로 처리 필요)
구성 요소 Android Jetpack Kotlin Coroutines
Backpressure 처리 불가능 가능 (buffer 등 사용)
Cold Stream 지원 X O
테스트 편의성 △ (라이프사이클 제어 필요) ◎ (Coroutines 기반 테스트 가능)

🎯 언제 LiveData를 쓸까?

  • 간단한 UI 상태를 처리할 때
  • Activity/Fragment 생명주기를 자동으로 관리하고 싶을 때
  • 기존 MVVM 코드에서 빠르게 유지보수할 때

// ViewModel
val userName = MutableLiveData<String>()

// Fragment
viewModel.userName.observe(viewLifecycleOwner) {
    textView.text = it
}

🚀 언제 Flow를 써야 할까?

  • 비동기 데이터 스트림이 필요할 때
  • 백프레셔(backpressure) 처리가 중요할 때
  • 라이프사이클과 무관한 로직(Repository, UseCase 등)

// ViewModel
val userFlow = flow {
    emit(api.getUserName())
}.flowOn(Dispatchers.IO)

// Fragment
lifecycleScope.launchWhenStarted {
    viewModel.userFlow.collect {
        textView.text = it
    }
}

💡 결론: 어떤 걸 써야 할까?

  • UI 위주 / 라이프사이클 연동 필요LiveData
  • 비동기 흐름 / 다양한 연산자 활용 / 백엔드 처리Flow

요즘은 ViewModel ↔ UseCase는 Flow, UI 연동은 StateFlow나 LiveData로 구성하는 혼합 방식이 대세입니다.


📌 참고 팁

  • StateFlow는 LiveData의 대체로 추천됩니다.
  • Jetpack Compose 사용 시엔 StateFlowcollectAsState() 활용이 표준입니다.
반응형