Coroutines Flow

    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 2편 - Flow 취소하기, Flow 빌더, Flow 중간 연산자

    Flow 취소하기 Flow는 Coroutines의 기본적인 협력적인 취소를 따른다. 일반적으로, 취소 가능한 일시중단 함수(delay 같은)에서 Flow가 일시중단될 때 Flow로부터 값을 수집하는 것이 취소될 수 있다. 다음의 예는 Flow가 withTimeoutOrNull 블록에서 실행될 때, Flow가 시간 초과에 따라 어떻게 취소되고 코드 실행이 중지되는지 보여준다 : fun simple(): Flow = flow { for (i in 1..3) { delay(100) println("Emitting $i") emit(i) } } fun main() = runBlocking { withTimeoutOrNull(250) { // Timeout after 250ms simple().collect { ..

    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 리소스를..