[kotlin] 코틀린(Kotlin) Flow의 결합 연산자
코틀린의 Flow
는 비동기로 값을 계산하거나 데이터를 전송하는 데 사용됩니다. Flow
에서 여러 연산자를 사용하여 여러 개의 플로우를 결합할 수 있습니다. 이는 데이터를 효과적으로 처리하고 필요한 형식으로 조작하는 데 도움이 됩니다.
Flow의 결합 연산자
코틀린 Flow
에서 가장 일반적으로 사용되는 결합 연산자는 zip
, combine
, concat
, merge
등이 있습니다.
Zip
zip
연산자는 각각의 플로우에서 하나의 값을 가져와서 새로운 값을 생성하는 데 사용됩니다. 이는 두 개의 플로우를 하나로 합칠 때 유용합니다.
Exmaple
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.runBlocking
fun main() = runBlocking {
val nums = (1..3).asFlow()
val strs = flowOf("one", "two", "three")
nums.zip(strs) { a, b -> "$a -> $b" }.collect { println(it) }
}
이 코드는 nums
플로우와 strs
플로우를 zip하여 새로운 조합된 값을 출력합니다.
결과:
1 -> one
2 -> two
3 -> three
Combine
combine
연산자는 각각의 플로우에서 새로운 값이 전달될 때마다 새로운 값을 생성하는 데 사용됩니다.
Example
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.runBlocking
fun main() = runBlocking {
val nums = (1..3).asFlow().onEach { delay(300) } // numbers 1..3 every 300 ms
val strs = flowOf("one", "two", "three").onEach { delay(400) } // strings every 400 ms
val startTime = currentTimeMillis() // remember the start time
nums.combine(strs) { a, b -> "$a -> $b" } // compose a single string
.collect { value ->
println("$value at ${currentTimeMillis() - startTime} ms from start")
} // collect and print
}
결과:
1 -> one at 501 ms from start
2 -> one at 802 ms from start
2 -> two at 1003 ms from start
3 -> two at 1105 ms from start
3 -> three at 1407 ms from start
Concat
concat
연산자는 먼저 한 플로우를 완료한 후에 두 번째 플로우를 시작합니다.
Example
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
fun main() = runBlocking {
val nums = (1..3).asFlow().onEach { delay(300) } // numbers 1..3 every 300 ms
val strs = flowOf("one", "two", "three").onEach { delay(400) } // strings every 400 ms
val startTime = currentTimeMillis()
nums.concat(strs).collect { value -> // compose a single string
println("$value at ${currentTimeMillis() - startTime} ms from start")
}
}
결과:
1 at 319 ms from start
2 at 619 ms from start
3 at 919 ms from start
one at 1320 ms from start
two at 1721 ms from start
three at 2121 ms from start
Merge
merge
연산자는 모든 플로우에서 값이 전달될 때마다 값을 생성하는 데 사용됩니다.
Example
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
fun main() = runBlocking {
val nums = (1..3).asFlow().onEach { delay(300) } // numbers 1..3 every 300 ms
val strs = flowOf("one", "two", "three").onEach { delay(400) } // strings every 400 ms
val startTime = currentTimeMillis() // remember the start time
nums.merge(strs).collect { value -> // collect and print
println("$value at ${currentTimeMillis() - startTime} ms from start")
}
}
결과:
one at 401 ms from start
1 at 601 ms from start
two at 801 ms from start
2 at 901 ms from start
3 at 1203 ms from start
three at 1205 ms from start
위의 예제를 사용하여 코틀린 Flow
의 결합 연산자가 실제로 어떻게 작동하는지 알아보았습니다.
더 많은 정보는 Kotlin Flow 공식 문서를 참조하세요.