[안드로이드] SharedFlow와 StateFlow에 대하여 간단하게 알아보자
어제 모기업의 면접을 보다가 SharedFlow와 StateFlow의 차이점에 대해서 물어봤다.
분명 둘 다 사용해봤던 클래스들이고, 데이터의 흐름에 관한건데 답변을 정확히 알고 하지 못했다.
이래저래 생각해보면 Compose로 넘어오면서 StateFlow도 사용하고 Compose도 사용하는데,
사용하는 것들에 대하여 정확하게 인지를 하지 않았었다. 그것과 관련된 것들을 하나하나 다 알아보고 정리를 해야겠다.
SharedFlow & StateFlow
- 상태의 업데이트를 최적으로 내보내고 여러 사용자들에게 값을 내보내는 Flow API이다.
- Hot Stream 이다. 따라서 데이터의 소비자가 나타나면 가장 마지막 그리고 후속 상태 및 데이터를 전달한다.
- SharedFlow와 StateFlow의 다른점은 API를 사용하는데 있어 StateFlow는 SharedFlow에 비해 관찰 가능한 변경 가능 상태를 유지해야 하는 클래스에 최적의 클래스다.
SharedFlow & StateFlow 처럼 Flow 쓰기
SharedFlow와 StateFlow는 Hot Stream이다. 그리고 Flow는 Cold Stream인데, Cold Stream인 Flow를 Hot Stream으로 만들기 위해서는 stateIn 확장 함수를 사용해줘야 한다. 안드로이드 문서에 나와있는 예시로 그 설명을 대체한다.
class NewsRemoteDataSource(...,
private val externalScope: CoroutineScope,
) {
val latestNews: Flow<List<ArticleHeadline>> = flow {
...
}.shareIn(
externalScope,
replay = 1,
started = SharingStarted.WhileSubscribed()
)
}
참고
https://developer.android.com/kotlin/flow/stateflow-and-sharedflow?hl=ko
StateFlow 및 SharedFlow | Kotlin | Android Developers
StateFlow 및 SharedFlow 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. StateFlow와 SharedFlow는 흐름에서 최적으로 상태 업데이트를 내보내고 여러 소비자에게 값을
developer.android.com