Kotlin 문법: 코루틴(Co-Routine)

SHY(code poet)·2024년 3월 13일

✨Kotlin에 관하여✨ 

목록 보기
32/36

● 코루틴(co-routine): 쓰레드보다 더욱 경량화된 동시처리 기능 (비동기프로그램)

-> 목표: 하나의 쓰레드안에서 다시 여럿의 코루틴을 나누어서 쓴다

  • 운영체제의 깊이있는 지식이 없어도 쉽게 비동기 프로그래밍을 할 수 있다.
  • 최적화된 비동기 함수를 사용
  • 하드웨어 자원의 효율적인 할당을 가능하게 한다
  • 안정적인 동시성, 비동기 프로그래밍을 가능하게 한다.
  • 코루틴이 쓰레드보다 더욱 가볍게 사용할 수 있다
  • 로직들을 협동해서 실행하자는게 목표이고 구글에서 적극 권장

스코프로 범위 지정 가능

  • GlobalScope: 앱이 실행된 이후에 계속 수행되어야 할 때 사용
  • CoroutineScope: 필요할 때만 실행하고 사용 후에는 정리 필요(cancel())

쓰레드 지정: 코루틴을 실행할 thread를 Dispetcher로 지정할 수 있다.

  • Dispetchers.Main: UI와 상호작용하기 위한 메인 쓰레드
  • Dispetchers.Io: 네트워크나 디스크 I/O 작업에 최적화 되어있는 쓰레드(서버작업등)
  • Dispetchers.Default: 기본적으로 CPU최적화 되어있는 쓰레드
    ⇒ withContext: 안드로이드에서는 특히 Dispetcherks의 변환을 해야하는 작업을 고려해야한다.
    (예를들어, ui가 적용되지 않는 로직들을 백그라운드에 동시적으로 실행하다가 ui에 결과값을 갱신해야하는 경우. [io->main])

https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/with-context.html

빌더와 함께 사용

  • launch 빌더: 결과값이 없는 코루틴 빌더/ job객체로 코루틴 관리
    (Job객체는 다양한 함수를 가지고 있다.
    join: 현재의 코루틴이 종료되기를 기다린다.
    cancel: 현재의 코루틴을 즉시 종료한다.)
  • async 빌더: 결과값이 있는 코루틴 빌더 / Deffered 타입으로 값 리턴
    (결과값을 리턴받아야하기 때문에 await은 일시중단이 가능한 코루틴에서 실행가능하다.)
profile
진정한 개발자는 코드를 두려워하지 않는다. 오히려 코드가 그를 두려워한다.

0개의 댓글