[kotlin] SharedFlow 개념 이해하기
SharedFlow는 Kotlin의 Flow API 중 하나로, 여러 개의 수신자가 동일한 데이터 스트림을 공유할 수 있도록 하는 기능을 제공합니다. 이를 통해 데이터 흐름을 구독하는 여러 수신자 간에 데이터를 공유하고 동기화할 수 있습니다.
SharedFlow의 핵심 요소
SharedFlow를 사용하는 데 있어 몇 가지 핵심 요소를 이해하는 것이 중요합니다:
- MutableSharedFlow: 데이터를 방출(emit)하기 위한
emit
함수를 제공합니다. - SharedFlow: 플로우의 데이터 스트림을 공유하고 여러 수신자가 구독할 수 있도록 합니다.
- asSharedFlow(): MutableSharedFlow를 SharedFlow로 변환해줍니다.
SharedFlow 사용 예시
다음은 SharedFlow를 사용하여 데이터 스트림을 공유하는 간단한 예시입니다.
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
val sharedFlow = MutableSharedFlow<Int>(replay = 1)
val job1 = launch {
sharedFlow.collect { value -> println("Job 1: $value") }
}
val job2 = launch {
sharedFlow.collect { value -> println("Job 2: $value") }
}
sharedFlow.emit(1) // Job 1, Job 2 둘 다 출력: 1
job1.cancel() // Job 1 취소
sharedFlow.emit(2) // Job 2만 출력: 2
job2.cancel() // Job 2 취소
}
위 예시에서 MutableSharedFlow
를 생성하고, 두 개의 수신자(job1, job2)가 해당 스트림을 구독합니다. 이후 emit
함수를 사용하여 값을 방출하면, 두 개의 수신자가 해당 값을 동시에 수신합니다.
SharedFlow를 사용함으로써 여러 수신자가 동일한 데이터 스트림을 공유하고, 각자의 속도에 맞게 데이터를 소비할 수 있게 됩니다.
마무리
SharedFlow를 사용하면 데이터 스트림을 공유하여 다수의 수신자에게 동일한 데이터를 제공할 수 있습니다. 이를 통해 효율적으로 데이터를 동기화하고 공유할 수 있는 기능을 제공합니다.