본문 바로가기

안드로이드/알아두기

[안드로이드] 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