[kotlin] 코틀린(Kotlin) Flow 구성 요소

코틀린의 Flow는 비동기 데이터 스트림을 표현하는 데 사용되는 비동기 시퀀스입니다. Flow는 여러 구성 요소를 사용하여 생성할 수 있으며, 이 구성 요소들이 Flow의 특성과 동작을 결정합니다.

이번 글에서는 코틀린 Flow를 구성하는 주요 요소들을 살펴보겠습니다.

Flow 생성자

Flow를 생성하는 가장 기본적인 방법은 flow 빌더 함수를 사용하는 것입니다. 또한, flowOfasFlow와 같은 확장 함수를 사용하여 인자로 전달된 요소들을 Flow로 변환할 수도 있습니다.

val flow = flow {
    for (i in 1..3) {
        delay(100)
        emit(i)
    }
}

Flow 연산자

Flow에는 다양한 연산자 함수가 제공됩니다. 예를 들어, map, filter, transform, zip 등의 연산자를 사용하여 Flow에서 방출되는 데이터를 변환하거나 조작할 수 있습니다.

flow.map { it * 2 }
    .filter { it % 3 == 0 }
    .collect { println(it) }

Flow 수집자

Flow를 수집하는 데 사용되는 수집자 함수로는 collect, toList, toSet, first, reduce 등이 있습니다. 수집자 함수를 사용하여 Flow로부터 결과를 추출하거나 수집할 수 있습니다.

val result = flow
    .filter { it > 1 }
    .toList()

Flow 시작 연산자

Flow의 시작 연산자는 Flow를 실행하는 데 사용됩니다. 주요 시작 연산자로는 launchIn, onEach, collect, toList, first 등이 있습니다.

flow.onEach { println("Flow: $it") }.launchIn(scope)

Flow 예외 처리

Flow에서 발생하는 예외는 처리해야 합니다. Flow 예외 처리는 try, catch, catch 등의 함수를 사용하여 수행할 수 있습니다.

flow.catch { e -> 
    println("Caught $e")
    emit(10)
}.collect { println(it) }

코틀린 Flow는 이러한 구성 요소들을 통해 고유한 데이터 스트림을 생성하고 조작할 수 있도록 하며, 비동기적으로 동작하는 애플리케이션을 구축하는 데 유용한 도구입니다.

참고 자료