아래 링크에서 역주가 없는 버전을 확인하실 수 있습니다.
Published on Web: https://seyoungcho2.github.io/CoroutinesKoreanTranslation/
Kotlin Coroutines 공식 문서 번역을 시작하며
Kotlin Coroutines는 Kotlin을 위한 강력한 비동기 솔루션이다. 안드로이드 실무에서는 한동안 높은 점유율을 자랑한 RxJava를 Coroutines가 대체하고 있으며, 새로 시작하는 프로젝트들은 모두 Coroutines를 사용하고 있다. 그 이유는 Coroutines의 성능과 간결성, 가독성에 있다. Coroutines는 기존 스레드 모델들과 다른 경량 스레드(Light Weight Thread)라는 개념을 도입 하여 불필요한 Thread Blocking을 방지할 수 있도록 하였으며, 직관적인 키워드를 통해 가독성을 높였다.
이러한 장점으로 많은 개발자들이 실무에서 Coroutines를 사용하기 시작했지만, 공부를 위한 자료가 많이 부족하며, 많은 배경 지식들을 요구하기 때문에 접근하기 위한 허들이 높다. 나 또한 한글로 된 제대로 된 자료가 존재하지 않는 상황에서 각종 영어로된 문서, 영상, 책 등을 찾아 모르는 부분을 해결하였고, 영어에 익숙한 나조차 코루틴을 이해하기 위해 몇 달 이상의 시간이 걸렸다.
나는 이것이 문제라고 생각해 많은 한국인 개발자들이 코루틴에 접근하기 쉽도록 하기 위해 책과 강의 공식문서 그리고 Google IO 등을 보면서 정리한 것을 18개의 글로 만들었고, 이에 대한 반응이 매우 좋았다. 하지만 이 글들은 내가 나름대로 주니어 개발자부터 시니어 개발자까지 이해하기 편하게 정리한 것일 뿐 Coroutines에 대한 모든 것을 다루지는 않는다.
이에 따라 이번에는 Coroutines 에 대한 깊은 부분까지 다루기 위해 공식 문서의 번역이라는 새로운 시도를 하고자 한다. 이번 번역 작업을 통해 번역의 완성도와 가독성을 모두 잡은 공식 문서 가이드가 나올 수 있었으면 바라는 마음으로 블로그를 열어 번역을 시작한다.
부디 이 번역 작업이 많은 분들께 도움이 되었으면 좋겠다. 아래에서 바로 번역을 시작한다.
Coroutines 가이드
Kotlin은 언어로서 다른 라이브러리들이 coroutines를 활용할 수 있도록 표준 라이브러리 상에서 최소한의 저수준 API들만을 제공한다. 비슷한 기능을 가진 다른 많은 언어들과 달리, async와 await은 Kotlin의 키워드나 표준 라이브러리의 구성요소가 아니다. 또한 Kotlin의 일시 중단 함수는 다른 비동기 개념인 futures나 promises보다 안전하고 오류가 덜 발생할 수 있도록 추상화 되어 있다.
kotlinx.coroutines 패키지는 coroutines에 다양한 기능들을 제공하기 위해 JetBrains사에서 개발된 라이브러리이다. 여기에는 launch, async 등 이 가이드에서 다루는 Coroutines 사용을 위한 고수준 primitives*가 포함된다.
*primitives : 프로그래밍에서 primitives는 가장 기본적인 동작을 뜻한다.
이 문서는 kotlinx.coroutines의 핵심 기능들에 대한 가이드이며, 다양한 주제들과 일련의 예시들로 구성되었다.
coroutines를 사용하고 이 가이드의 예제를 학습하기 위해서는 project README에 설명된 대로 kotlinx-coroutines-core에 대한 의존성을 추가해야 한다.
목차
- Coroutines 기초
- Coroutines 취소
- Coroutines 실행 시간 제한하기
- Coroutines 일시중단 함수 구성하기
- Coroutine Context와 Dispatcher
- Coroutine Context와 Dispatcher 1편 - Dispatchers와 Threads, Unconfined vs confined dispatcher
- Coroutine Context와 Dispatcher 2편 - Coroutines와 Threads 디버깅 하기 : IntelliJ 사용, 로깅 사용
- Coroutine Context와 Dispatcher 3편 - Thread들 간에 점프 하기, Context 내부의 Job, Coroutine의 자식들
- Coroutine Context와 Dispatcher 4편 - 부모 Coroutine의 책임, Coroutines에 이름 짓기, Context 요소들 결합하기
- Coroutine Context와 Dispatcher 5편 - Coroutine Scope
- Coroutine Flow
- Coroutines Flow 1편 - 복수의 값들 표현하기, Flow는 차갑다
- Coroutines Flow 2편 - Flow 취소하기, Flow 빌더, Flow 중간 연산자
- Coroutines Flow 3편 - Flow 터미널 연산자, Flow는 순차적이다
- Coroutines Flow 4편 - Flow의 수집이 일어나는 Context, Flow Buffering - buffer, conflate, collectLatest
- Coroutines Flow 5편 - 여러 Flow 하나로 합치기, Flow를 Flatten하기 - flatMapConcat, flatMapMerge, flatMapLatest
- Coroutines Flow 6편 - Flow 예외 처리, Flow의 예외 투명성
- Coroutines Flow 7편 - Flow 수집 완료 처리하기, Flow 명령적으로 다루기 vs 선언적으로 다루기
- Coroutines Flow 8편 - Flow 실행하기, Flow와 Reactive Stream
- Coroutine Channels
- Coroutine Channels 1편 - Channel이란 무엇인가, Channel 닫기, Channel 반복적으로 수신하기, Producer로 Channel 만들기
- Coroutine Channels 2편 - Channel로 파이프라인 만들기, 파이프라인으로 소수 만들기
- Coroutine Channels 3편 - Fan-out과 Fan-in : Channel이 얼마나 많은 출력, 입력을 만들 수 있는지 알아보기
- Coroutine Channels 4편 - Buffered channels, Channel은 평등하다, Ticker channels
- Coroutine 예외 처리
- Coroutine 공유 상태와 동시성
- Coroutine와 Channels 튜토리얼
- Coroutine Debugging
추가 참조
- Guide to UI programming with coroutines
- Coroutines design document (KEEP)
- Full kotlinx.coroutines API reference
- Best practices for coroutines in Android
- Additional Android resources for Kotlin coroutines and flow
이 글은 Coroutines 공식 문서를 번역한 글입니다.
원문 : Coroutines guide 문서
원문 최종 수정 : 2022년 6월 27일
이 글은