안드로이드/Android 비동기 처리

코루틴 Coroutine

코딩하는후운 2022. 4. 16. 14:38
반응형

# 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()는 반환값 존재

 

 

 

참조 :

개인 스터디 공부 그룹

https://jaejong.tistory.com/61

반응형