[kotlin] 코틀린(Kotlin) Flow의 연산자(Operators)

코루틴 플로우(Coroutine Flow)는 비동기 데이터 스트림을 처리하기 위한 라이브러리이며, Java의 RxJava나 RxKotlin과 유사한 기능을 제공합니다. 코루틴 플로우에서 제공하는 다양한 연산자를 사용하여 데이터의 변환, 필터링, 결합 등 다양한 작업을 수행할 수 있습니다.

이 글에서는 코틀린(Kotlin) 플로우의 연산자에 대해 알아보겠습니다.

맵(Map)

map 연산자는 각각의 요소에 변환을 적용하여 새로운 요소를 생성합니다.

예시:

flowOf(1, 2, 3)
    .map { it * 2 }
    .collect { println(it) } // 출력: 2, 4, 6

필터(Filter)

filter 연산자는 주어진 조건에 맞는 요소만을 유지합니다.

예시:

(1..5).asFlow()
    .filter { it % 2 == 0 }
    .collect { println(it) } // 출력: 2, 4

결합(Combine)

combine 연산자는 두 개의 플로우를 결합하여 새로운 값을 생성합니다.

예시:

val flow1 = flowOf("A", "B", "C")
val flow2 = flowOf(1, 2, 3)

combine(flow1, flow2) { f1, f2 -> "$f1$f2" }
    .collect { println(it) } // 출력: A1, B2, C3

플랫맵(FlatMap)

flatMap 연산자는 각 입력 요소에 대해 새로운 플로우를 생성하고, 그 플로우들을 단일 플로우로 결합합니다.

예시:

flowOf("A", "B", "C")
    .flatMapConcat { flowOf("$it1", "$it2") }
    .collect { println(it) } // 출력: A1, A2, B1, B2, C1, C2

결합 및 변환(Combine and Transform)

transformLatest 연산자는 가장 최근의 값으로 새로운 값을 생성합니다.

예시:

val flow1 = MutableStateFlow("A")
val flow2 = flowOf(1, 2, 3)

flow2.transformLatest { value2 ->
    emit("${flow1.value}$value2")
}.collect { println(it) } // 출력: A1, A2, A3

코틀린 플로우의 연산자를 활용하면 데이터를 유연하게 처리할 수 있으며, 비동기 스트림을 다루는 작업을 간편하게 할 수 있습니다.

더 많은 코틀린 플로우의 연산자에 대해서는 공식 문서를 참고하세요.