[Kotlin] 코루틴의 개념과 용어정리

Chance·2025년 1월 6일

코루틴

  • 코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴입니다.

용어정리

- launch

- 반환값이 없는 코루틴을 실행

- async, await

- 반환값이 있는 코루틴을 실행

- runBlocking

- 현재 스레드를 블로킹하여 코루틴을 실행
- 주로 테스트나 메인 함수에서 사용
ex) 아래 예제에서 아무값이 출력되지 않는 건 실행과 동시에 바로 종료 되기 때문에 코루틴이 실행되지 못한것(기다리지 못한 것)

따라서 코루틴이 끝까지 실행되는 것을 보장하기 위해서는 일정한 범위내에서 기다려주어야 한다.

 import kotlinx.coroutines.*

 fun main() {

 val scope = GlobalScope
   	scope.launch {
       	for(i in 1..5) {
           	println(i)
       	}
  	}
 }

이럴 떄는 runBlocking 블럭을 만들고 launch, async를 넣어 준다
코루틴이 종료 될떄까지 메인 루틴을 잠시 대기 시켜준다
안드로이드에서는 메인 스레드에서 runBlocking을 걸어주면 일정시간 이상 응답이 없는 경우 ANR(Application Not Responding) : 응답 오류 발생 -> 강제종료됨

import kotlinx.coroutines.*

fun main() {

    runBlocking {
        launch {
            for(i in 1..5) {
                println(i)
            }
        }
    }
}

- Dispatcher

- 코루틴이 실행될 때 컨텍스트(스레드)를 정의
	- Dispatchers.Default : CPU 집약적 (백그라운드 스레드)
    - Dispatchers.IO : 입출력 작업 최적화 (파일, 넨트워크)
    - Dispatchers.Main : 메인 (UI) 스레드에서 실행

- Suspension

- 코루틴이 일시적으로 멈추는 지점을 의미

- Scope

- 코루틴 컨텍스트 제공
	- 디스패처, 잡을 포함하는 컨텍스트를 제공
- 코루틴 수명 관리
- 구조화된 동시성
  - 모든 코루틴은 부모 Scope안에서 실행합니다.
  

잡(JOB)

  • 코루틴의 상태와 수명을 관리
  • 부모자식 관계를 가진다.

- Scope 종류

1. GlobalScope

  • 앱 전체적으로 사용할 수 있는 전역 Scope
  • 앱이 종료될 때까지 코루틴이 살아있다.

2. CourutinScope

  • 명시적으로 Scope를 생성하여 사용자가 수명을 관리하는 Scope
  • 수명을 정의하여 특정 조건에 Scope를 종료할 수 있다.

0개의 댓글