시배's Android

Kotlin Coroutines Deep Dive | 6장. 코루틴 빌더 본문

Book/Kotlin Coroutines Deep Dive

Kotlin Coroutines Deep Dive | 6장. 코루틴 빌더

si8ae 2024. 1. 21. 00:36
  • 중단 함수는 컨티뉴에이션 객체를 다른 중단 함수로 전달해야 합니다.
  • 중단 함수가 일반 함수를 호출하는 것은 가능하지만, 일반 함수가 중단 함수를 호출하는 것은 불가능합니다.
  • 중단 함수를 연속으로 호출하면 시작되는 지점이 반드시 있습니다. 코루틴 빌더가 그역할을 합니다.
  • CoroutineScope 인터페이스는 부모 코루틴과 자식 코루틴 사이의 관계를 정립하기 위한 목적으로 사용되는 구조화된 동시성의 핵심입니다.

runBlocking 빌더

  • 코루틴이 스레드를 블로킹하지 않고 작업을 중단시키기만 하는 것이 일반적인 법칙입니다.
  • 메인 함수의 경우 프로그램을 너무 빨리 끝내지 않기 위해 스레드를 블로킹해야 합니다.
  • 프로그램이 끝나는 걸 방지하기 위해 스레드를 블로킹할 필요가 있는 메인 함수입니다.
  • 스레드를 블로킹할 필요가 있는 유닛테스트입니다.
  • 현재는 거의 사용되지 않습니다.
  • 유닛테스트에서는 코루틴을 가상 시간으로 실행시키는 runtest가 주로 사용되고 있습니다.

async 빌더

  • launch와 비슷하지만 값을 생성하도록 설계되어 있습니다.
  • Deferred 타입의 객체를 리턴합니다.
  • 작업이 끝나면 값을 반환하는 중단 메서드인 await가 있습니다.
  • 값이 생성되기 전에 await를 호출하면 값이 나올 때까지 기다리게 됩니다.

구조화된 동시성 

  • 부모는 자식들을 위한 스코프를 제공하고 자식들을 해당 스코프 내에서 호출합니다.
  • 자식은 부모로부터 컨텍스트를 상속받습니다.
  • 부모는 모든 자식이 작업을 마칠 때까지 기다립니다.
  • 부모 코루틴이 취소되면 자식 코루틴도 취소됩니다.
  • 자식 코루틴에서 에러가 발생하면, 부모 코루틴 또한 에러로 소멸합니다.
  • runBlocking은 자식이 될 수 없으며 루트 코루틴으로만 사용될 수 있습니다.