728x90
- launch 빌더
- launch 빌더는 새로운 코루틴을 시작하고, 결과를 반환하지 않습니다(Unit을 반환).
- 주로 병렬 작업을 수행할 때 사용하며, 작업이 완료될 때까지 기다리지 않습니다.
- launch로 시작된 코루틴은 부모 코루틴의 생명주기에 연결되어 부모가 취소되면 자식도 취소됩니다.
- runBlocking 빌더
- runBlocking은 현재 스레드를 블록하고 코루틴이 완료될 때까지 기다립니다.
- 주로 테스트나 메인 함수에서 코루틴 코드를 실행하기 위해 사용됩니다.
- runBlocking 내부에서는 다른 코루틴을 시작할 수 있으며, 내부 코루틴이 모두 완료될 때까지 기다립니다.
- async 빌더
- async 빌더는 코루틴을 시작하고 Deferred 타입의 결과를 반환합니다.
- 반환된 Deferred 객체를 통해 나중에 결과값을 받을 수 있으며, await 함수를 호출하여 결과값을 기다릴 수 있습니다.
- 주로 결과 값을 반환하는 병렬 작업에 사용됩니다.
- coroutineScope
- 코루틴 스코프의 인스턴스를 생성하여 코루틴을 관리할 수 있습니다.
- CoroutineScope를 사용하면 코루틴의 생명주기를 해당 스코프의 생명주기에 연결할 수 있습니다. 즉, 스코프가 취소되면 스코프 내의 모든 코루틴도 취소됩니다.
- 사용자가 직접 스코프를 관리하고 싶을 때 사용합니다.
- GlobalScope
- 애플리케이션의 생명주기와 동일한 글로벌 스코프를 제공합니다.
- GlobalScope로 시작된 코루틴은 애플리케이션 전체에서 실행되며, 별도로 취소하지 않는 이상 애플리케이션이 종료될 때까지 계속 실행됩니다.
- 메모리 누수의 위험이 있으므로, 주의해서 사용해야 합니다.
- 코루틴 스코프의 선택은 코루틴의 생명주기와 애플리케이션의 구조에 따라 달라집니다. 일반적으로 GlobalScope의 사용은 권장되지 않으며, 가능하면 CoroutineScope를 사용하여 명확한 생명주기 관리와 자원 정리를 수행하는 것이 좋습니다.
728x90
'공부 > 코틀린코루틴:딥다이브(마르친 모스카와)' 카테고리의 다른 글
8장 - 잡과 자식 코루틴 기다리기 (0) | 2024.01.29 |
---|---|
7장 - 코루틴 컨텍스트 (0) | 2024.01.29 |
4장 - 코루틴의 실제 구현 (2) | 2024.01.14 |
3장 - 중단은 어떻게 작동할까? (0) | 2024.01.13 |
2장 - 시퀀스 빌더 (0) | 2024.01.13 |
댓글