비동기식으로 또는 동시에 작업을 실행할 때는 작업 실행 방법, 코루틴의 지속 시간, 취소되거나 오류로 인해 실패하는 경우 발생하는 현상 등에 대한 질문에 답해야 합니다. 코루틴은 구조화된 동시 실행의 원칙을 따르므로, 메커니즘의 조합을 사용하여 코드에서 코루틴을 사용할 때 이러한 질문에 답해야 합니다.
launch() 함수로 코루틴을 실행하면 Job 인스턴스가 반환됩니다. Job은 코루틴의 핸들 또는 참조를 보유하므로 그 수명 주기(유지 기간)를 관리할 수 있습니다.
Job을 사용하면 활성, 취소, 완료 등의 상태를 확인할 수 있습니다. 코루틴 및 이 코루틴이 실행한 코루틴이 모든 Job을 완료하면 Job이 완료됩니다. 취소되거나 예외와 함께 실패하는 등 다른 이유로 코루틴이 완료되었을 수도 있지만 그렇더라도 Job은 해당 지점에서 완료된 것으로 간주됩니다.
코루틴이 다른 코루틴을 실행할 때 새 코루틴에서 반환되는 작업을 원래 상위 작업의 하위 요소라고 합니다.
val job = launch {
...
val childJob = launch { ... }
...
}
이 상위-하위 관계는 하위 요소와 상위 요소 및 동일한 상위 요소에 속한 다른 하위 요소의 특정 동작을 지정하므로 중요합니다.
코루틴은 일반적으로 CoroutineScope내에서 실행됩니다. 이렇게 하면 코루틴이 관리되지 않아 손실되는 일이 없으므로 리소스 낭비를 방지합니다.
launch() 및 async()는 CoroutineScope의 확장 함수입니다. CoroutineScope의 범위에서 launch() 또는 async()를 호출하여 이 범위 내에서 새 코루틴을 만듭니다.
CoroutineScope는 수명 주기와 연결되어 범위 내의 코루틴이 유지되는 기간에 경계를 설정합니다. 범위가 취소되면 작업이 취소되고 취소가 하위 작업에 전파됩니다. 범위의 하위 작업이 예외와 함께 실패하면 다른 하위 작업이 취소되고, 상위 작업이 취소되며, 호출자에 예외가 다시 발생합니다.
CoroutineContext는 코루틴이 실행될 컨텍스트에 관한 정보를 제공합니다. CoroutineContext는 본질적으로 각 요소에 고유한 키가 있는 요소를 저장하는 맵입니다. 아래 4가지 항목을 필수적으로 넣어야 하는 것이 아닌 기본 Default값이 정해져있습니다.
❗️참고: 값을 입력하지 않으면 아래와 같은 Default 값으로 설정
코루틴은 디스패처를 사용하여 실행에 사용할 스레드를 결정합니다. 만약 더이상 진행할 작업이 없으면 스레드는 작업을 종료합니다.
Kotlin은 코루틴을 실행할 위치를 지정하기 위해 다음과 같은 내장 디스패처를 제공합니다.