Android(Kotlin)

StateFlow / SharedFlow

----___<<<<< 2022. 12. 15. 21:22

 

코루틴을 공부하다보면 가끔 보는 친구들입니다.

 

이 친구들이 뭔지 한번 보고 가겠습니다.

 

 

- 구글 공식문서

 

우선 구글 공식문서에서는 어떻게 설명하고 있냐하고 하면 

 

stateFlow

 

StateFlow는 현재 상태와 새로운 상태 업데이트를 수집기에 내보내는 관찰 가능한 상태 홀더 흐름입니다. value 속성을 통해서도 현재 상태 값을 읽을 수 있습니다. 상태를 업데이트하고 흐름에 전송하려면 MutableStateFlow 클래스의 value 속성에 새 값을 할당합니다.

Android에서 StateFlow는 관찰 가능한 변경 가능 상태를 유지해야 하는 클래스에 아주 적합합니다.

 

여기까지 읽어보면 LiveData와 비슷한데? 라는 생각이 듭니다.

 

livedata와 차이점

 

때문에 구글 문서에서는 

 

StateFlow와 LiveData는 비슷한 점이 있습니다. 둘 다 관찰 가능한 데이터 홀더 클래스이며, 앱 아키텍처에 사용할 때 비슷한 패턴을 따릅니다.

그러나 StateFlow와 LiveData는 다음과 같이 다르게 작동합니다.

  • StateFlow의 경우 초기 상태를 생성자에 전달해야 하지만 LiveData의 경우는 전달하지 않습니다.
  • 뷰가 STOPPED 상태가 되면 LiveData.observe()는 소비자를 자동으로 등록 취소하는 반면, StateFlow 또는 다른 흐름에서 수집하는 경우 자동으로 수집을 중지하지 않습니다. 동일한 동작을 실행하려면 Lifecycle.repeatOnLifecycle 블록에서 흐름을 수집해야 합니다.

 

와 같이 설명하고 있습니다. livedata와는 다르게 view에 영향을 받고 있습니다.

 

 

shareIn

 

StateFlow  흐름으로, 흐름이 수집되는 동안 또는 가비지 컬렉션 루트에서 다른 참조가 있는 경우 메모리에 남아 있습니다. shareIn 연산자를 사용하여 콜드 흐름을 핫 흐름으로 전환할 수 있습니다.

 

sharedFlow

 

stateFlow / sharedFlow 들의 차이점을 잠시 보면

 

1. StateFlow는 반드시 초기값을 명시 해주어야 합니다.
2. StateFlow는 value 속성을 이용해 값을 방출할수 있습니다(또는 가져올수도 있죠)
3. SharedFlow는 좀더 detail한 설정값들을 생성자에 전달해줄수 있습니다.

그리고 가장 큰 차이점은 StateFlow는 값을 중복으로 방출할경우, collect()해오지 않는다는것 입니다.

 

 

 

 

 - 참조

 

https://stanleykou.tistory.com/entry/httpsproandroiddevcomshould-we-choose-kotlins-stateflow-or-sharedflow-to-substitute-for-android-s-livedata-2d69f2bd6fa5

 

[Kotlin] livedata를 떠나보내고 코틀린 stateflow 나 sharedflow를 써야 할까요?

이 글은 아래 글은 번역한 것입니다. proandroiddev.com/should-we-choose-kotlins-stateflow-or-sharedflow-to-substitute-for-android-s-livedata-2d69f2bd6fa5 Substituting Android's LiveData: StateFlow or SharedFlow? Kotlin Coroutines recently intro

stanleykou.tistory.com

 

https://velog.io/@vov3616/StateFlow-vs-SharedFlow%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%95%8C%EA%B3%A0%EC%9E%88%EB%8B%88

 

StateFlow vs SharedFlow의 차이점 알고있니?

Android를 공부하다보면, StateFlow와 SharedFlow를 한번쯤 들어보셨을껍니다.하지만 서로 이름이 비슷하기도 하고, 쓰임새도 비슷해 뭐가 다른지 모르는 일이 있을것같습니다.한번 뭐가 다른지 정리해

velog.io

 

https://myungpyo.medium.com/stateflow-%EC%99%80-sharedflow-32fdb49f9a32

 

StateFlow 와 SharedFlow

코루틴 공식 가이드 읽기 Part 9 — Dive1

myungpyo.medium.com

 

https://developer.android.com/kotlin/flow/stateflow-and-sharedflow

 

StateFlow 및 SharedFlow  |  Android 개발자  |  Android Developers

StateFlow 및 SharedFlow 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. StateFlow와 SharedFlow는 흐름에서 최적으로 상태 업데이트를 내보내고 여러 소비자에게 값을

developer.android.com

 

https://www.youtube.com/watch?v=6Jc6-INantQ 

 

'Android(Kotlin)' 카테고리의 다른 글

Paging Advanced  (0) 2022.12.26
Room SQLCipher  (0) 2022.12.21
Hot Stream / Cold Stream  (0) 2022.12.15
LiveData emit / emitSource  (0) 2022.12.13
Application Class  (0) 2022.12.06