PHpullh
학습 라이브러리/Kotlin/StateFlow와 SharedFlow

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 를 사용하세요.