본문 바로가기

분류 전체보기114

Coroutine Job과 Scope Job Job은 life-cycle이 있는 cancellable 값?? 인터페이스 이다. 즉, 코루틴 context에 존재하는 여러 값 중 하나로 외부에 의해 언제든 중단이 가능한 값이다. (join 이나 cancel을 통해서..) Job을 구현하는 인터페이스는 2개 정도로 볼 수 있는데, Coroutine job과 CompletableJob이 있다. 1) Coroutine job은 launch 코루틴 빌더에 의해서 생성 2) CompletableJob은 Job() factory에 의해서 생성된다. 그런데 Job 특성이 코루틴 block을 실행시지만 결과값을 주진 않는다. (값을 얻기 위해서는 Deferred를..) Job의 내부 상태는 위의 그림과 같다. 코루틴의 시점마다 상태가 다를 수 있지만, 간단.. 2020. 11. 22.
Coroutine Context and Dispatchers 여타 자원들 처럼 코루틴 또한 내부적으로 Context를 가지고 있다. 이를 코루틴 Context라 명명하는데, 실제 관련 문서를 살펴보면, kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines/-coroutine-context/ CoroutineContext - Kotlin Programming Language kotlinlang.org 인덱싱된 Element 인스턴스의 집합으로 Persistent 속성을 가지고 있다. 내부적으로 코루틴 dispatcher를 가지고 있는데, 이후에도 계속 살펴보겠지만 dispatcher는 코루틴이 어떤 스레드에서 실행될지 결정해주는 필수 요소이다. Dispatcher 간단하게 코루틴을 사용하게 되면 dispatcher에 신경.. 2020. 11. 22.
Coroutine Flow - 4부 Flow에 대해 4부로 계속 알아가보자. Launching Flow fun events(): Flow = (1..3).asFlow().onEach { delay(100) } fun main() = runBlocking { events() .onEach { event -> println("Event: $event") } .collect() // println("Event: $event") } .launchIn(this) // updateUi(value) } .onCompletion { cause -> updateUi(if (cause == null) "Done" else "Failed") } .catch { cause -> LOG.error("Exception: $cause") } .launchIn(uiS.. 2020. 11. 22.
Coroutine Flow - 3부 세번째 시간을 가져보자. Exception 떨어질래야 떨어질 수 없는 예외처리 부분이다. Flow는 내부 코드 상에서 (+ operator) 예외가 발생하면 예외와 함께 종료된다. 그럼 일반적으로 통용되는 방법으로 예외를 핸들링해보면 아래와 같이 코드를 작성 할 수 있다. fun simple(): Flow = flow { for (i in 1..3) { println("Emitting $i") emit(i) // emit next value } } .map { value -> check(value println(value) } } catch (e: Throwable) { println("Caught $e") } } 실제로 위의 코드를 실행해보면, "2"에서 에러가 발생하고 끝이난다. 그런데 flow는 예.. 2020. 11. 21.