KOTLIN · 비동기
StateFlow와 SharedFlow
StateFlow는 상태를 보유하고, SharedFlow는 이벤트를 브로드캐스트합니다. 핫 스트림의 두 가지 핵심 타입입니다.
비동기고급stateflowsharedflowhot-streamviewmodel
핵심 설명
StateFlow는 상태를 보유하고, SharedFlow는 이벤트를 브로드캐스트합니다. 핫 스트림의 두 가지 핵심 타입입니다.
Kotlin code
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
class CounterViewModel {
private val _count = MutableStateFlow(0)
val count: StateFlow<Int> = _count.asStateFlow()
private val _events = MutableSharedFlow<String>()
val events: SharedFlow<String> = _events.asSharedFlow()
fun increment() {
_count.value++
}
suspend fun notifyChange() {
_events.emit("카운트 변경: ${_count.value}")
}
}
fun main() = runBlocking {
val vm = CounterViewModel()
// StateFlow 구독
val job1 = launch {
vm.count.collect { println("상태: $it") }
}
// SharedFlow 구독
val job2 = launch {
vm.events.collect { println("이벤트: $it") }
}
delay(100)
vm.increment()
vm.notifyChange()
vm.increment()
vm.notifyChange()
delay(100)
job1.cancel()
job2.cancel()
}학습 팁
StateFlow는 항상 최신 값을 유지하고, SharedFlow는 구독자가 없으면 값을 버립니다. 상태에는 StateFlow, 이벤트에는 SharedFlow를 사용하세요.
주의할 점
StateFlow는 동일 값을 연속으로 방출하지 않습니다(distinctUntilChanged). 같은 값이라도 알림이 필요하면 SharedFlow를 사용하세요.
자주 묻는 질문
StateFlow와 SharedFlow란 무엇인가요?
StateFlow 는 상태를 보유하고, SharedFlow 는 이벤트를 브로드캐스트합니다. 핫 스트림의 두 가지 핵심 타입입니다.
StateFlow와 SharedFlow 학습 시 주의할 점은 무엇인가요?
StateFlow 는 동일 값을 연속으로 방출하지 않습니다(distinctUntilChanged). 같은 값이라도 알림이 필요하면 SharedFlow 를 사용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.