전체 글98 [Kotlin/coroutine] 6. Asynchronous Flow (2) Composing multiple flows multiple 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 -> three Combine flow가 변수나 작업의.. 2023. 10. 26. [Kotlin/coroutine] 5. Asynchronous Flow (1) 중단 함수는 비동기적으로 단일 값을 리턴한다. 하지만 우리는 비동기적으로 계산된 여러개의 값을 어떻게 리턴할 수 있을까? 그래서 Flow가 등장하게 되었다! Representing multiple values 여러개의 값들은 Kotlin에서 collections를 사용해서 나타낼 수 있다. 예를 들어, 3개의 숫자는 리스트로 리턴하고, forEach를 사용해서 출력할 수 있다. 코드 fun simple(): List = listOf(1, 2, 3) fun main() { simple().forEach { value -> println(value) } } 실행 결과 1 2 3 Sequences CPU를 사용해서 각 계산에 100ms정도가 소요되는 blocking code에서 계산하는 경우 Sequence를.. 2023. 10. 25. [Kotlin/Coroutine] 4. Coroutine context and dispatchers 코루틴은 항상 Kotlin표준 라이브러리에 정의된 CoroutineContext 타입의 값으로 표시되는 컨텍스트에서 실행된다. 코루틴 컨텍스트는 다양한 요소의 집합이다. 주요 요소로 코루틴의 Job과 Dispatcher가 있다. Dispatchers and threads Coroutine Context의 구성 코루틴의 실행에 사용되는 Thread 스레드를 결정하는 Coroutine Dispatcher Coroutine Dispatcher의 동작 코루틴의 실행을 특정 스레드로 제한 코루틴을 Thread pool에 보냄 코루틴을 무제한으로 실행할 수 있도록 함 launch와 async같은 모든 코루틴 빌더는 새로운 코루틴과 다른 컨텍스트 요소에 특정 Dispatcher를 지정할 수 있는 CoroutineCo.. 2023. 10. 24. [Kotlin/Coroutine] 3. Composing suspending functions 중단 함수 구성에 대한 다양한 접근법 Sequential by default 순차적으로 실행 두개의 중단 함수가 다른 곳에 정의되어있다고 가정하자. 코드 suspend fun doSomethingUsefulOne(): Int { delay(1000L) // pretend we are doing something useful here return 13 } suspend fun doSomethingUsefulTwo(): Int { delay(1000L) // pretend we are doing something useful here, too return 29 } 위의 두가지 중단함수가 순차적으로 실행되기 위해서는 어떻게 해야할까? 코드 val time = measureTimeMillis { val one .. 2023. 10. 23. 이전 1 2 3 4 ··· 25 다음