Kotlin

[Kotlin/코루틴] Coroutine 구성 요소 소개 및 CoroutineScope 설명

yujinius 2025. 1. 15. 00:44

 

Coroutine은 세 가지 주요 구성 요소로 이루어져 있다

바로 CoroutineScope, CoroutineContext, 그리고 CoroutineBuilder이다.

코루틴 구성 요소 3가지

  • CoroutineScope: 코루틴의 실행 범위를 정의.
  • CoroutineContext: 디스패처(Dispatcher)와 잡(Job) 등 코루틴의 실행 환경을 포함.
  • CoroutineBuilder: 코루틴을 생성하고 실행하는 빌더(launch, async 등).

그중에서도 CoroutineScope는 코루틴의 실행 범위를 정의하며, 모든 코루틴이 속한 범위를 설정해준다. 이 글에서는 CoroutineScope를 살펴보도록 하겠다.


🌠 CoroutineScope

https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-coroutine-scope/

 

CoroutineScope

CoroutineScope Defines a scope for new coroutines. Every coroutine builder (like launch, async, etc.) is an extension on CoroutineScope and inherits its coroutineContext to automatically propagate all its elements and cancellation. The best ways to obtain

kotlinlang.org

 

  • CoroutineScope는 새로운 코루틴의 실행 범위를 정의하는 인터페이스이다.
  • 모든 코루틴 빌더(launch, async 등)는 CoroutineScope를 확장하며, coroutineContext를 상속받아 자동으로 모든 구성 요소와 취소(cancellation)를 전달한다.

주요 개념

  1. 코루틴 스코프의 생성:
    • 독립적인 코루틴 스코프를 생성하려면 CoroutineScope() 또는 MainScope() 팩토리 함수를 사용한다.
    • 스코프가 더 이상 필요하지 않을 때는 이를 명시적으로 취소해야 한다.
  2. 추가 컨텍스트 요소:
    • CoroutineScope에 추가적인 컨텍스트 요소를 + 연산자를 통해 추가할 수 있다.
  3. 구조적 동시성(Structured Concurrency):
    • CoroutineScope의 컨텍스트는 Job 인스턴스를 포함해야 하며, 이를 통해 구조적 동시성을 유지하고 취소(cancellation)를 전파한다.
    • 코루틴 빌더(launch, async)와 범위 함수(coroutineScope, withContext)는 모두 고유한 스코프와 Job 인스턴스를 생성하며, 해당 블록 내부의 모든 코루틴이 완료될 때까지 기다린다.
    • 이를 통해 구조적 동시성을 보장한다. (이후 포스팅될 Job 부분 추가로 참고하기)
  4. Android에서의 사용:

커스텀 사용법

  • CoroutineScope는 명확한 라이프사이클을 가진 엔티티에서 속성(Property)으로 선언하여 자식 코루틴을 관리하도록 해야 한다.

CoroutineScope 생성 방법

  1. CoroutineScope():
    • 전달받은 컨텍스트를 사용하며, 컨텍스트에 Job이 포함되지 않았다면 자동으로 추가한다.
  2. MainScope():
    • 기본적으로 Dispatchers.Main을 사용하며, SupervisorJob을 포함한다.

스코프 취소의 중요성

  • 라이프사이클이 끝날 때 CoroutineScope.cancel()을 호출하여 해당 스코프에서 실행 중인 모든 코루틴을 취소해야 한다.
  • 이는 남아 있는 코루틴 실행을 중지하고 리소스를 해제하기 위해 필수적이다.

상속된 클래스

  1. GlobalScope:
    • 애플리케이션 전역에서 사용할 수 있는 스코프
    • 주의: 구조적 동시성을 제공하지 않으므로 권장되지 않음
  2. ProducerScope:
    • 코루틴 빌더인 produce에서 사용
  3. ActorScope:
    • 액터 코루틴(Actor coroutine)에서 사용됨

주요 속성: coroutineContext

  • CoroutineScope의 컨텍스트
  • 컨텍스트에는 Job 인스턴스와 Dispatcher가 포함

요약하자면

  • CoroutineScope는 코루틴의 활동 범위로 내가 원하는 범위의 스코프를 설정하는 것이다.
  • 구조적 동시성을 유지하며, 적절한 시점에 스코프를 취소하여 리소스를 관리해야 한다.