반응형
# Coroutine
Android Developer 에서의 정의
“비동기적으로 실행되는 코드를 간소화 하기 위해 Android 에서 사용할 수 있는 동시 실행 설계 패턴”
코루틴은 Android의 비동기 프로그래밍에 권장되는 솔루션입니다. 주목할 만한 기능은 다음과 같습니다.
- 경량: 코루틴을 실행 중인 스레드를 차단하지 않는 *정지*를 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있습니다. 정지는 많은 동시 작업을 지원하면서도 차단보다 메모리를 절약합니다.
- 메모리 누수 감소: *구조화된 동시 실행*을 사용하여 범위 내에서 작업을 실행합니다.
- 기본으로 제공되는 취소 지원: 실행 중인 코루틴 계층 구조를 통해 자동으로 취소가 전달됩니다.
- Jetpack 통합: 많은 Jetpack 라이브러리에 코루틴을 완전히 지원하는 확장 프로그램이 포함되어 있습니다. 일부 라이브러리는 구조화된 동시 실행에 사용할 수 있는 자체 코루틴 범위도 제공합니다.
위 설명을 보면 스레드 내에 코루틴 오브젝트들이 생성되며 이것들은 중단되고 실행되고를 처리할 수 있음.
즉 굳이 스레드를 새로 만들지 않고도 내부적으로 태스크를 번갈아가며 수행할수 있음.
# 핵심 키워드
- CoroutineScope & GlobalScope
CoroutineScope는 코루틴의 범위, 코루틴 블록을 묶음으로 제어할 수 있는 단위
GlobalScope는 CoroutineScope의 한 종류로 Top-Level Coroutine, Application의 생명주기에 종속적으로 존재 - CoroutineContext
CoroutineContext는 코루틴을 어떻게 처리할 것인지에 대한 정보 집합
주요 요소로는 Job & dispatcher가 존재 - Dispatcher
Dispatcher는 CoroutineContext의 주요 요소
CoroutineContext를 상속받아 어떤 스레드를 어떻게 동작할 것인가에 대한 정의
어떻게?
Main / IO / Default중의 어떤방식으로 처리할 것인지
Dispatchers.Main - 메인(UI) 스레드에서 동작하는 방식
Dispatchers.IO - 네트워크 / 디스크(파일) 작업에 사용하는 방식으로 File의 읽기/쓰기 & 소켓 읽기/쓰기 최적화
Dispatchers.Default - CPU 사용량이 많은 작업에 사용, 메인 스레드에서 하기엔 긴 작업들에 적합
-> Main을 제외한 IO / Defulat는 백그라운드 작업 - launch() & async()
Scope의 확장함수로서, 코루틴을 만들고 실행하는 코루틴빌더
두 함수의 차이점으로는 객체와 반환에 차이점을 갖고있음.
객체 - launch()는 Job() 반환 / async()는 Deferred<T> 반환
반환값 - launch()는 반환값 X / async()는 반환값 존재
참조 :
개인 스터디 공부 그룹
반응형
'안드로이드 > Android 비동기 처리' 카테고리의 다른 글
[Android] Coroutine StateFlow, Flow, LiveData, ViewModelScope, LifecycleScope + Paging3 (1) | 2024.03.20 |
---|---|
비동기 처리(process&thread) (0) | 2022.06.07 |
Coroutine suspend function (0) | 2022.04.19 |
CoroutineContext (0) | 2022.04.16 |
비동기 처리 - 블로킹과 논블로킹 (0) | 2022.04.13 |