Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- MVVM
- error
- GIT
- RecyclerView
- Android
- Gradle
- studio
- 레트로핏
- 안드로이드 스튜디오
- 유튜브
- viewpager
- 깃헙
- ADB
- build
- 코틀린
- 안스
- 에러
- coroutine
- 안드로이드
- Github
- 코루틴
- 안드로이드스튜디오
- 스튜디오
- image
- 웹뷰
- 의존성주입
- Kotlin
- dart
- WebView
- Retrofit
Archives
- Today
- Total
코딩하는 일용직 노동자
CoroutineFlow에서 Hot Stream과 Cold Stream 이란? 본문
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를 선택하여 효율적인 앱을 개발할 수 있습니다.
'안드로이드' 카테고리의 다른 글
모바일 핫스팟 및 테더링 메뉴 바로가기 intent (0) | 2025.01.22 |
---|---|
junit5:1.6.1.0 Received status code 502 from server: Bad Gateway 빌드에러 해결사례 (0) | 2024.12.13 |
android:duplicateParentState 속성에 대하여... (0) | 2024.07.24 |
java.lang.SecurityException: Writable dex file '...classes2.dex' is not allowed. 에러 해결 (0) | 2024.05.27 |
Compose Row&Column 의 배치속성 (0) | 2024.05.21 |