코루틴 Flow
Coroutines Flow 8편 - Flow 실행하기, Flow와 Reactive Stream
Flow 실행하기 일부 소스에서 오는 비동기 이벤트를 표현하기 위해 flow를 사용하기 쉽다. 이런 경우, 들어오는 이벤트에 대한 반응을 코드로 등록하고 이후의 작업을 계속해서 수행하도록 하는 addEventListener() 함수와 비슷한 역할을 하는 것이 필요하다. 이 역할을 onEach 연산자가 해줄 수 있다. 그러나, onEach는 중간 연산자이다. Flow를 수집하기 위해서는 터미널 연산자 또한 필요하다. 그렇지 않으면 onEach만을 호출하는 것만으로는 효과가 없다. 만약 onEach 이후에 collect 터미널 연산자를 사용하면, 이후의 코드는 Flow가 수집될 때까지 기다릴 것이다 : // Imitate a flow of events fun events(): Flow = (1..3).asF..
Coroutines Flow 5편 - 여러 Flow 하나로 합치기, Flow를 Flatten하기 - flatMapConcat, flatMapMerge, flatMapLatest
여러 Flow 하나로 합치기 복수의 Flow를 합치는 다양한 방법이 있다. Zip Kotlin 표준 라이브러리 상의 Sequence.zip 확장 함수처럼, Flow는 두 개의 Flow의 값을 결합하는 zip 연산자를 가지고 있다. val nums = (1..3).asFlow() // numbers 1..3 val strs = flowOf("one", "two", "three") // strings nums.zip(strs) { a, b -> "$a -> $b" } // compose a single string .collect { println(it) } // collect and print 📌 전체 코드는 이곳에서 확인할 수 있습니다. 이 예제는 다음을 출력한다. 1 -> one 2 -> two 3 -..
Coroutines Flow 3편 - Flow 터미널 연산자, Flow는 순차적이다
Flow 터미널 연산자 Flow의 터미널 연산자는 flow를 수집을 시작하는 일시정지 함수*1이다. collect 연산자는 가장 기본 연산자이지만, 사용을 더 쉽게 만드는 다른 터미널 연산자들도 있다. 다양한 Collection으로의 변환을 수행하는 toList 와 toSet 같은 연산자.*2 첫 값만 가져오기 위한 first 연산자와 하나의 값만 방출되는 것을 확인하는 single 연산자.*3 flow를 값으로 줄이는 reduce나 fold를 연산자. 예를 들어 : val sum = (1..5).asFlow() .map { it * it } // squares of numbers from 1 to 5 .reduce { a, b -> a + b } // sum them (terminal operator)..
Coroutines Flow 1편 - 복수의 값들 표현하기, Flow는 차갑다
일시 중단 함수들은 비동기적으로 단일 값을 반환한다. 그렇다면 어떻게 비동기적으로 계산된 복수의 값들을 반환할 수 있을까? 여기에서 바로 Kotlin의 Flows가 등장한다. 복수의 값들 표현하기 Kotlin에서 복수의 값들은 Collections를 사용해 표현될 수 있다. 예를 들어 3개의 숫자를 가진 List를 반환하는 simple 함수를 가지고, forEach를 사용해 그들을 모두 프린트할 수 있다. fun simple(): List = listOf(1, 2, 3) fun main() { simple().forEach { value -> println(value) } } 📌 전체 코드는 이곳에서 확인할 수 있습니다. 이 코드의 출력은 다음과 같다 : 1 2 3 Sequences 만약 CPU 리소스를..