Observer 패턴과 양대산맥으로 많이 쓰인다는 Flow인데, 나는 많이 사용해본적이없어서, 이제야 꾸역꾸역 알아가는 중이다.
그래서 오늘은 Cold Stream, Hot Stream에 대해서 정리했다.
Flow
Cold Stream, Hot Stream에 대해서 얘기하기전에, 이 둘과 밀접한 연관이 있는 Flow에 대해서 간단하게 짚고 넘어가자.
Flow는 공식 문서에서 'Flows are built on top of coroutines and can provide multiple values.' 이라고 간단하게 설명되어 있으며, 코루틴 기반으로 빌드되고, 여러 값들을 하나의 흐름으로 제공해준다. 그리고 이러한 흐름은 Cold Stream, Hot Stream으로 구분된다.
Cold Stream
Cold Stream은 하나의 소비자에게만 값을 보내며, 생성 이후, 누군가가 데이터를 소비하기 시작하면 그 시점에 데이터를 발행한다.간단하게 예를 들어서 아이스크림 디스펜서를 예로 생각해보자. 아이스크림 디스펜서는 누군가가 사용하기 이전까지는 아이스크림을 스스로 뽑아내지 않는다. 다만 누군가가 아이스크림을 먹고싶어서 아이스크림 디스펜서를 동작시켰을 때, 아이스크림을 디스펜싱할 것이고, 한 명의 사용자만 아이스크림을 디스펜싱할 수 있다. 이러한 일련의 과정을 위에 Cold Stream의 설명에 대입하면 이해하기 편할것이다.
Hot Stream
Hot Stream은 하나의 흐름을 여러명과 공유할 수 있다. 또한 Cold Flow와는 다르게 누군가 소비를 하지 않아도, 항상 동작을 이어나간다. 일종의 물이 나오는 분수를 예로 생각하면 된다. 분수는 하나를 두고 여러 사람들이 구경해서 소비를 한다. 그리고 분수를 구경하는 사람이 없어도, 지속적으로 그 동작을 이어나가게 된다. 이런 맥락에서 Hot Stream을 이해하면 이해하기 편할것이다.
3줄 요약
1. Cold Stream은 한번에 소비자가 한명있고, 소비를 해야지 데이터를 발행한다.
2. Hot Stream은 한번에 여러 소비자가 있을 수 있고, 소비자가 없어도 동작을 한다.
3. Flow랑 연관 있다.
'안드로이드 > 알아두기' 카테고리의 다른 글
[안드로이드] Kotlin에서 List, Set, Map에 대하여 (0) | 2023.10.16 |
---|---|
[안드로이드] SharedFlow와 StateFlow에 대하여 간단하게 알아보자 (0) | 2023.10.14 |
[안드로이드] let, run 등에 대하여 (0) | 2022.01.31 |
[코틀린] inner class(내부 클래스)와 nested class(중첩 클래스)에 대하여 (0) | 2021.12.11 |
[안드로이드] 코루틴에 대하여 (0) | 2021.12.09 |