[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
코틀린 플로우의 연산자를 활용하면 데이터를 유연하게 처리할 수 있으며, 비동기 스트림을 다루는 작업을 간편하게 할 수 있습니다.
더 많은 코틀린 플로우의 연산자에 대해서는 공식 문서를 참고하세요.