
(StateFlow와 SharedFlow는 흐름에서 최적으로 상태 업데이트를 내보내고 여러 소비자에게 값을 내보낼 수 있는 Flow API이다.)
StateFlow가 사용되기 이전에는 LiveData 클래스를 사용해서 데이터 갱신을 수집했었다.
LiveData는 Observable한 데이터 홀더 클래스이기 때문에 Observe 하는 클래스에서 데이터의 변경을 감지하고 상태를 업데이트하는데 사용되었다.
같은 역할을 StateFlow도 수행하는데 왜 StateFlow가 등장했는지 알아보자.
LiveData 는 AAC 라이브러리이기 때문에 의존성을 갖지 않아야 하는 클린 아키텍처의 Domain Layer에서는 사용할 수 없다.
LiveData은 Main Thread에서만 동작할 수 있기 때문에 비동기 처리에 한계가 있다.
MediatorLiveData, Transformations, Coroutines와 같은 추가적인 도구를 사용해야 한다.
이러한 단점은 StateFlow 의 등장 배경이 되었다..!
Flow가 등장함에 따라서 LiveData의 대체 가능성이 생겼고,
StateFlow, SharedFlow이 함께 등장해서 LiveData를 완전히 대체 할 수 있게 되었다.
StateFlow와 SharedFlow 둘 다 HotStream을 기반으로 Collect() 이후부터 데이터를 가져올 수 있다.
StateFlow는
SharedFlow는

로딩화면에 적용한 예시이다.
_isLoading을 변경가능하게 private로 선언해서 외부에서 접근할 수 없게 만들고 isLoading으로 데이터를 발행해서 변경되는 값을 최신으로 구독할 수 있게 만들었다.

로딩화면을 SharedFlow로 다시 만들어봤다.
replay는 새로운 구독자들에게 이전 이벤트의 방출 여부 (0 미방출 1 방출)extraBufferCapacity는 추가 buffer 생성 여부 (1 생성)OnBufferOverflow는 버퍼 초과시 처리 여부 (DROP_OLDEST = 가장 오래된 데이터 drop)StateFlow는 LiveData의 대체 데이터 홀더 클래스
SharedFlow는 Flow의 기능을 활용한 디테일한 데이터 홀더 클래스