Coroutines/Coroutine Basics

    [Coroutine] Coroutine(코루틴)과 Subroutine(서브루틴)의 차이 - Coroutine이란 무슨 뜻일까?

    루틴이란 무엇인가? 우리는 Routine을 운동 루틴 혹은 공부 루틴과 같은 '특정한 일을 하기 위한 일련의 처리 과정'이란 뜻으로 사용한다. 비슷하게 전통적으로 프로그래밍에서는 루틴을 '특정한 일을 처리하기 위한 일련의 명령'으로 사용해 왔다. 실제로 구글에 routine을 찾으면 아래와 같이 나온다. 루틴(Routine)이란 컴퓨터 프로그램의 일부로써 특정한 일을 실행하기 위한 일련의 명령이다. 우리는 프로그래밍에서 이러한 일련의 명령을 함수라 부른다. 자 이제 서브루틴(Sub-Routine)에 대해 알아볼 준비가 되었다. 서브루틴이란 무엇인가? 프로그래밍에서는 함수 안에 함수가 있을 경우 바로 안쪽의 함수를 서브루틴이라 부른다. 예를 들어 아래와 같은 코드가 있다고 해보자. fun routine1(..

    [Coroutine] Kotlin을 위한 코루틴(Coroutine) 정리 - Coroutines for Android and Kotlin

    Kotlin Coroutines 공식 기술 문서 번역이 GitHub 오픈소스로 배포되었습니다. Starganizer가 되어 오픈소스를 지지해주세요. Kotlin Coroutines 공식 문서 번역을 시작하며 · GitBook Kotlin Coroutines 공식 문서 번역을 시작하며 Kotlin Coroutines는 Kotlin을 위한 강력한 비동기 솔루션이다. 안드로이드 실무에서는 한동안 높은 점유율을 자랑한 RxJava를 Coroutines가 대체하고 있으며, 새로 seyoungcho2.github.io 들어가며 코루틴을 공부하고나서 언젠가는 정리해야지 하고 있었는데, 이번에 시간이 있어서 정리를 하게 되었다. 아래 내용을 모두 이해할 수 있다면 코루틴의 기초적인 부분은 모두 이해했다고 볼 수 있으며..

    [Coroutine] 13. supervisorScope를 이용한 Coroutine Exception Handling

    블록 내부의 모든 코루틴에 SupervisorJob()을 설정 : supervisorScope 앞선 12번글에서 SupervisorJob을 이용해 Error을 Handling하는 방법을 알았다. 하지만, 매번 CoroutineContext에 SupervisorJob을 설정할 필요 없이 특정 블록 내부의 모든 코루틴에 Supervisor Job을 설정하고 싶을 수 있다. 이 때 사용하는 것이 바로 supervisorScope이다. 과 같이 supervisorScope 내부에 코루틴이 있다면 모든 코루틴은 SupervisorJob의 적용을 받게된다. 예를들어 아래와 같은 코드가 있다고 해보자. suspend fun main() { CoroutineScope(Dispatchers.IO).launch { // ..

    [Coroutine] 12. SupervisorJob를 이용한 Coroutine Exception Handling

    Coroutine의 Exception Handling Coroutine은 비동기 프로그래밍을 위한 일시중단가능한 경량 스레드이기 때문에 코루틴 내부에서 코루틴이 수행될 수 있으며, 그 깊이는 무한해질 수 있다. 하지만, 코루틴 내부에서 수행되는 자식 코루틴에 애러가 생겼을 때 별도의 Exception Handler을 설정해주지 않으면 자식 코루틴은 부모 코루틴까지 취소시키게 된다. 부모 코루틴이 취소되면 당연히 부모의 자식으로 있는 코루틴이 모두 취소된다. 예를 들어 아래와 같은 구조의 코루틴이 수행된다고 해보자 만약 Child Coroutine1에서 애러가 생겨서 Coroutine이 취소되었다고 하면 아래와 같은 일이 일어난다. Child Coroutine1의 취소가 부모 Coroutine에게 전파된다..

    [Coroutine] 11. Coroutine CoroutineContext를 다루는 방법 : Coroutine Dispatcher과 ExceptionHandler을 CoroutineContext를 이용해 관리하기

    CoroutineContext 앞서 우리는 다음의 내용들을 배웠다. Dispatcher: 코루틴이 실행될 스레드 풀을 잡고 있는 관리자 CoroutineExceptionHandler: 코루틴에서 Exception이 생겼을 때의 처리기 그런데 이 두 가지 요소는 CoroutineContext가 들어가야 할 자리에 그대로 들어갈 수 있다. 에서는 Dispatcher가 CoroutineContext 자리에 들어간다. 에서는 CoroutineExceptionHandler가 CoroutineContext자리에 들어간다. 이것이 가능한 이유는 각각이 CoroutineContext를 확장하는 인터페이스의 구현체이기 때문이다. *CoroutineDispatcher의 내부 살펴보기 더보기 public abstract c..