코틀린의 Flow는 비동기 데이터 스트림을 표현하는 데 사용되는 비동기 시퀀스입니다. Flow는 여러 구성 요소를 사용하여 생성할 수 있으며, 이 구성 요소들이 Flow의 특성과 동작을 결정합니다.
이번 글에서는 코틀린 Flow를 구성하는 주요 요소들을 살펴보겠습니다.
Flow 생성자
Flow를 생성하는 가장 기본적인 방법은 flow
빌더 함수를 사용하는 것입니다. 또한, flowOf
나 asFlow
와 같은 확장 함수를 사용하여 인자로 전달된 요소들을 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는 이러한 구성 요소들을 통해 고유한 데이터 스트림을 생성하고 조작할 수 있도록 하며, 비동기적으로 동작하는 애플리케이션을 구축하는 데 유용한 도구입니다.