코딩하는 일용직 노동자

CoroutineFlow에서 Hot Stream과 Cold Stream 이란? 본문

안드로이드

CoroutineFlow에서 Hot Stream과 Cold Stream 이란?

bacass 2024. 9. 7. 15:13
 

Flow의 기본 개념 복습
Flow는 코틀린에서 비동기 데이터 스트림을 표현하는 방법입니다. 데이터를 순차적으로 발행하고, 여러 종류의 연산을 지원하여 데이터를 변형하거나 필터링할 수 있습니다.

Hot Stream vs Cold Stream
Flow는 데이터가 생성되고 소비되는 시점에 따라 Hot Stream과 Cold Stream으로 나눌 수 있습니다.

Cold Stream
소비자가 시작해야 데이터 생성: 소비자가 Flow를 구독(subscribe)해야 비로소 데이터가 생성되고 전달됩니다.
각 소비자는 독립적인 스트림: 각 소비자는 독립적인 스트림을 가지므로, 다른 소비자가 어떤 값을 받았는지에 영향을 받지 않습니다.
예시: 네트워크 요청 결과, 데이터베이스 쿼리 결과 등
주요 특징:
지연 실행: 소비자가 구독하기 전까지 아무런 작업이 수행되지 않습니다.
데이터 공유 불가: 각 소비자는 독립적인 데이터를 받습니다.
재실행: 소비자가 다시 구독하면 처음부터 다시 실행됩니다.

Hot Stream
소비자와 상관없이 데이터 생성: 소비자가 구독하지 않더라도 데이터가 계속 생성됩니다.
여러 소비자가 동일한 데이터 공유: 여러 소비자가 동일한 데이터를 공유합니다.
예시: 실시간 채팅 메시지, 센서 데이터 스트림 등
주요 특징:
즉시 실행: 소비자와 상관없이 데이터가 생성됩니다.
데이터 공유: 여러 소비자가 동일한 데이터를 받습니다.
동시성 문제: 여러 소비자가 동시에 접근할 때 동기화 문제가 발생할 수 있습니다.


StateFlow와 SharedFlow
안드로이드에서 자주 사용되는 StateFlow와 SharedFlow는 각각 Cold Stream과 Hot Stream의 특징을 가지고 있습니다.

StateFlow:
단일 값 저장: 특정 시점의 단일 값만을 저장하고 방출합니다.
Cold Stream 성격: 소비자가 구독해야 값을 받을 수 있습니다.
UI 상태 관리: UI 상태를 표현하는 데 주로 사용됩니다.

SharedFlow:
다중 값 방출: 여러 개의 값을 순서대로 방출할 수 있습니다.
Hot Stream 성격: 소비자가 구독하지 않아도 데이터가 생성될 수 있습니다.
이벤트 스트림: 사용자 입력, 네트워크 요청 결과 등 이벤트 스트림을 표현하는 데 적합합니다.

언제 어떤 것을 사용해야 할까요?
Cold Stream (StateFlow): UI 상태, 시스템 설정 등 단일 값이 변화하는 경우에 적합합니다.
Hot Stream (SharedFlow): 사용자 입력, 네트워크 요청 결과 등 시간에 따라 여러 개의 값이 발생하는 경우에 적합합니다.

결론
Flow는 안드로이드 앱에서 비동기 데이터 흐름을 관리하는 강력한 도구입니다. Hot Stream과 Cold Stream의 차이점을 이해하고, 각 상황에 맞는 Flow를 선택하여 효율적인 앱을 개발할 수 있습니다.