LiveData 와 StateFlow

김정현·2024년 4월 9일
post-thumbnail

LiveData 와 State Flow

클린 아키텍처를 공부하면서 안드로이드에 의존성이 있는 LiveData는 순수 Java 및 Kotlin 코드로만 구성되어야 하는 도메인 레이어에는 사용하기 적합하지 않다는 사실을 알게 되었다. 그래서 이번 기회에 LiveData의 개념을 다시 한번 잡고 LiveData의 한계와 단점을 알아보고 State Flow의 기본 개념에 대해 포스팅 해보려고한다.

LiveData란

  • 수명주기를 인식하는 관찰 가능한 데이터 홀더 클래스
  • 즉, 안드로이드 컴포넌트(Activity, Fragment, Service 등)의 생명 주기 인식을 통해 활성 생명주기 상태인 관찰자만 업데이트 한다.

LiveData의 장점

  • 생명주기에 따라 동작하기 때문에, 메모리 누수가 발생하지 않는다
  • Observer 패턴을 사용하기 때문에, 데이터의 변화를 실시간으로 구독자에게 통지할 수 있다.

클린 아키텍처 관점에서의 LiveData의 한계

  • LiveData는 UI와 밀접하게 관련이 있으며, 주로 동기적인 데이터 흐름을 처리 하도로고 설계되어 있기 때문에 Data Layer에서 비동기 방식으로 데이터를 처리하기엔 부적절하다.
  • LiveData는 안드로이드 플랫폼에 속해 있기 때문에 순수 Java / Kotlin으로 이루어져야 하는 Domain Layer에서 사용하기에 적합하지 않다.

StateFlow란

  • 현재 상태와 새로운 상태 업데이트를 collector에 내보내는 Observable한 State holder Flow 입니다.
  • SharedFlow의 한 종류이며, LiveData에 가장 가깝다.
  • UI상태를 View에 노출시킬 때 효과적으로 사용할 수 있다.

StateFlow 특징

  • 항상 값을 가지고 있으며, 오직 한 가지 값을 가진다. -> 초기값이 존재해야한다.
  • 여러개의 colletor를 지원한다. -> flow를 공유할 수 있다.
  • collector수에 상관없이 항상 구독하는 것의 최신 값을 받는다.
  • HotStream 방식으로 collect할 때마다 flow가 재실행되지 않는다.

    HotStream & ColdStream
    Cold Stream:
    하나의 소비자(Consumer)에게 값을 보냅니다.
    생성된 이후에 누군가 소비하기 시작하면 데이터를 발행한다.
    Hot Stream:
    하나 이상의 소비자(consumer)에게 값을 보낼 수 있다.
    데이터 발행이 시작된 이후 모든 소비자에게 같은 데이터를 발행하고 구독자가 없는 경우에도 데이터를 발행한다.

LiveData와 StateFlow의 차이

profile
안녕하세요 반갑습니다

0개의 댓글