본문 바로가기

coroutines6

Android Networking with coroutines Flow 들어가기전에 Flow 문서를 보고 정리한 포스팅이며 1, 3, 4번은 필수로 학습이 필요하다. -> Flow #1 : Flow builders, operators, context -> Flow #2 : Buffering -> Flow #3 : Composing and flattening flows -> Flow #4 : Exceptions, completions, cancellation 요즘 구글 가이드라인으로 coroutines 이 필수적으로 등장하고 있어서 기존에 서버 API 통신을 위해 사용하던 Rx 를 coroutines Flow 를 사용하는 패턴으로 변경해보려 한다. 기본 구조 MVVM 구조와 서버 API 통신을 위해 Retrofit2 의 조합을 전제로 해본다. 크게 App module 과 서버.. 2020. 8. 6.
Coroutines - Channels https://kotlinlang.org/docs/reference/coroutines/channels.html Channels - Kotlin Programming Language kotlinlang.org 1. Basics Deffered value 는 코루틴 간 단일 값을 전송하고 Channel 은 값 스트림을 전송하는 방법을 제공한다 Channel 은 개념적으로 BlockingQueue 와 매우 유사하지만 put, take 대신 suspend send 와 receive 가 있다 val channel = Channel() launch { // this might be heavy CPU-consuming computation or async logic, we'll just send five squar.. 2020. 7. 30.
Coroutines - Flow #4 : Exceptions, completions, cancellation https://kotlinlang.org/docs/reference/coroutines/flow.html Asynchronous Flow - Kotlin Programming Language kotlinlang.org 1. Flow exceptions 연산자 내부의 emitter 또는 코드에서 예외가 발생하면 flow collection 이 예외로 완료 할 수 있다. fun simple(): Flow = flow { for (i in 1..3) { println("Emitting $i") emit(i) // emit next value } } fun main() = runBlocking { try { simple().collect { value -> println(value) check(value che.. 2020. 7. 27.
Coroutines - Flow #3 : Composing and flattening flows https://kotlinlang.org/docs/reference/coroutines/flow.html Asynchronous Flow - Kotlin Programming Language kotlinlang.org 1. Composing multiple flows Zip 두 flow 값을 결합하며 둘 중 작은 개수에 맞춰 결과 개수도 리턴된다 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 pri.. 2020. 7. 27.
Coroutines - Flow #2 : Buffering https://kotlinlang.org/docs/reference/coroutines/flow.html Asynchronous Flow - Kotlin Programming Language kotlinlang.org 1. Buffer 일반적으로 flow 는 아래 예제처럼 순차적이며 모든 연산자의 코드가 동일한 코루틴에서 실행됨을 의미한다 flowOf("A", "B", "C") .onEach { println("1$it") } .collect { println("2$it") } /** * 결과 * * Q : -->-- [1A] -- [2A] -- [1B] -- [2B] -- [1C] -- [2C] -->-- */ 따라서 연산자 내 코드를 실행하는 데 상당한 시간이 걸리게되면 총 실행 시간은 모든 연산자 .. 2020. 7. 21.
Coroutines - Flow #1 : Flow builders, operators, context https://kotlinlang.org/docs/reference/coroutines/flow.html Asynchronous Flow - Kotlin Programming Language kotlinlang.org Suspend function : 비동기로 단일 값을 반환 Kotlin Flows : 비동기로 여러 값을 반환 1. Representing multiple values Collection fun foo(): List = listOf(1, 2, 3) fun main() { foo().forEach { value -> println(value) } } Sequence : Collection 의 결과와 같지만, 100ms 간격으로 값을 출력하며 메인 스레드 blocking 한다. fun foo(.. 2020. 7. 9.