코루틴(Coroutine)은 뭘까?

코루틴(Coroutine)은 뭘까?

생성일
Nov 4, 2024 06:35 AM
최종 편집 일시
Last updated November 8, 2024
태그
Kotlin
CS

코루틴?

코루틴은 비동기 작업을 효율적으로 처리하기 위한 라이브러리다.
복잡한 스레드 관리 방법 대신 비동기 처리를 훨씬 쉽게 할 수 있도록 도와주는 도구이다.
메모리와 CPU 사용이 최적화되고 코드가 동기적으로 실행되는 것처럼 직관적으로 비동기 작업을 작성할 수 있도록 도와준다.
 

기본 개념

1. Coroutine Scope

  • 코루틴이 실행되는 범위를 나타낸다. 코루틴은 특정 스코프 내에서 생성되고 실행된다. 해당 스코프가 종료되면 그 스코프에 속한 모든 코루틴도 취소된다.
  • 주요 스코프로는 GlobalScope, CoroutineScope 등이 있고 일반적으로 CoroutineScope를 사용해 명확한 범위 내에서 코루틴을 관리하는 편이다.

2. Coroutine Builder

  • 코루틴을 생성하는 함수다. 가장 많이 사용하는 launch와 async가 있다.
    • launch: 작업을 시작하고, 결과가 필요 없을 때 사용한다. 반환 타입이 Job이다.
    • async: 작업을 시작하고, 결과를 반환해야 할 때 사용한다. 반환 타입이 Deferred이며, await() 함수를 통해 결과를 받을 수 있다.

3. Suspending Function

  • 코루틴에서 실행되는 함수로, suspend 키워드로 정의한다.
  • suspend 함수는 코루틴 안에서만 실행 가능하며, 비동기 작업을 수행하면서 중단할 수 있다.
  • 예를 들어, delay() 함수는 suspend 함수로 코루틴을 일정 시간 동안 중단시킬 수 있다.

4. Dispatcher

  • 코루틴이 실행되는 스레드를 지정한다. 주로 다음과 같은 디스패처를 사용한다.
    • Dispatchers.Main: 메인 스레드에서 실행한다. UI와 상호작용하거나 UI 업데이트가 필요한 작업에 사용된다.
    • Dispatcher.IO: I/O 작업을 위한 스레드에서 실행한다. 파일 읽기/쓰기, 네트워크 요청 등 입출력 작업에 적합하다.
    • Dispatcher.Default: CPU 집중 작업을 위한 스레드에서 실행된다. 데이터 처리나 복잡한 계산 작업에 적합하다.

5. Job과 Cancellation

  • Job은 코루틴의 상태를 제어하고 추적할 수 있게 해주는 객체이다.
  • launch 함수가 반환하는 Job 객체를 사용해 해당 코루틴을 취소할 수 있다.
  • cancel() 함수를 호출해 코루틴을 중지할 수 있으며, 코루틴 애부에서는 isActive 속성으로 현재 코루틴이 활성 상태인지 확인할 수 있다.
 

스레드와 코루틴의 차이

  1. 스레드
    1. 프로세스보다 작은 개념이다.
    2. 한 스레드는 오직 한 프로세스에만 포함되어 있다.
    3. 컨텍스트 스위칭 발생 시 stack 영역이 교체된다.
    4. OS가 스레드를 강제로 멈추고 다른 스레드를 실행한다.
  1. 코루틴
    1. 스레드보다 작은 개념이다.
    2. 한 코루틴의 코드는 여러 스레드에서 실행될 수 있다.
    3. (한 스레드에서 실행하는 경우) 컨텍스트 스위칭 발생 시 메모리 교체가 없다.
    4. 코루틴 스스로가 다른 코루틴에게 양보한다.