어제 모기업의 면접을 보다가 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
'안드로이드 > 알아두기' 카테고리의 다른 글
[안드로이드] 동기화에 대하여 알아보자(1) - 세마포어와 뮤텍스 (2) | 2023.10.23 |
---|---|
[안드로이드] Kotlin에서 List, Set, Map에 대하여 (0) | 2023.10.16 |
[안드로이드] Cold Stream, Hot Stream에 대하여 (0) | 2023.10.13 |
[안드로이드] let, run 등에 대하여 (0) | 2022.01.31 |
[코틀린] inner class(내부 클래스)와 nested class(중첩 클래스)에 대하여 (0) | 2021.12.11 |