[kotlin] asFlow 함수 사용하기

코틀린 플로우(flow)는 비동기적인 데이터 스트림을 처리하는 데 사용됩니다. 이를 통해 데이터를 비동기적으로 소비하거나, 연산하고, 통지할 수 있습니다.

1. Flow 생성하기

import kotlinx.coroutines.flow.asFlow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.runBlocking

fun main() = runBlocking {
    (1..5).asFlow().collect { value -> println(value) }
}

여기서 asFlow 함수는 주어진 요소들을 플로우로 변환하여 반환하며, collect 함수는 플로우가 생성하는 값을 소비합니다. 위 예제는 1부터 5까지의 값을 플로우로 생성하고, 값을 소비하여 출력합니다.

2. Flow 연산하기

플로우에 대해 연산을 수행하기 위해서는 map, filter, transform 등의 함수를 사용할 수 있습니다.

import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.runBlocking

fun main() = runBlocking {
    (1..5).asFlow()
        .map { value -> value * 2 }
        .filter { it % 3 == 0 }
        .collect { value -> println(value) }
}

위 예제는 1부터 5까지의 값을 플로우로 생성하고, 각각의 값을 2배로 만든 뒤, 3으로 나누어 떨어지는 값만을 출력합니다.

3. 에러 처리하기

플로우는 에러 처리를 위해 catch 함수를 제공합니다.

import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.runBlocking

fun main() = runBlocking {
    (1..5).asFlow()
        .map { value -> check(value) }
        .collect { value -> println(value) }
}

fun check(value: Int): Int {
    if (value == 3) throw RuntimeException("Error on $value")
    return value
}

위 예제는 1부터 5까지의 값을 플로우로 생성하고, 각각의 값을 check 함수에서 확인합니다. 만약 값이 3이라면 예외를 발생시켜 에러를 처리합니다.

코틀린에서 플로우를 사용하기 위해서는 kotlinx-coroutines-core 라이브러리가 필요합니다.

플로우를 이해하는 것은 비동기 코드를 작성하고, 효과적으로 처리하는 데 도움이 됩니다.

Reference