[kotlin] SharedFlow 개념 이해하기

SharedFlow는 Kotlin의 Flow API 중 하나로, 여러 개의 수신자가 동일한 데이터 스트림을 공유할 수 있도록 하는 기능을 제공합니다. 이를 통해 데이터 흐름을 구독하는 여러 수신자 간에 데이터를 공유하고 동기화할 수 있습니다.

SharedFlow의 핵심 요소

SharedFlow를 사용하는 데 있어 몇 가지 핵심 요소를 이해하는 것이 중요합니다:

  1. MutableSharedFlow: 데이터를 방출(emit)하기 위한 emit 함수를 제공합니다.
  2. SharedFlow: 플로우의 데이터 스트림을 공유하고 여러 수신자가 구독할 수 있도록 합니다.
  3. 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를 사용하면 데이터 스트림을 공유하여 다수의 수신자에게 동일한 데이터를 제공할 수 있습니다. 이를 통해 효율적으로 데이터를 동기화하고 공유할 수 있는 기능을 제공합니다.