Coroutine이란?

장재용·2024년 5월 5일

Non-Blocking lightweight thread

: 쓰레드는 아니지만, 쓰레드처럼 특정 업무를 별개의 수행 흐름으로 실행시키기 위한 용도

쓰레드보다 경량이다
메모리 누수가 작다
취소 등 다양한 기법을 지원한다 (쓰레드는 사실상 불가능)
많은 JetPack 라이브러리에 적용되어 있다
구글에서 적극 권장

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'

Scope

: 코루틴이 실행되는 영역
1. CoroutineScope
job을 설정하지 않으면 기본 job이 설정된다.
2. LifecycleScope
해당 코드가 작성된 소유자 ( 액티비티에 작성되어 있으면 액티비티 생명주기에 따름) 의 라이프사이클과 연계되어 있다.
3. ViewModelScpoe
ViewModel에 연결된 CoroutineScope이다.
ViewModel이 지워지면 스코프가 없어진다.

Dispatchers

  1. Dispatchers.Main
    액티비티의 메인 스레드에서 동작하는 코루틴을 만들기 위한 디스패처
  2. Dispatchers.IO : 파일 Read/Write 또는 네트워크 작업에 최적화된 디스패처
  3. Dispatchers.Default : CPU를 많이 사용하는 작업을 백그라운드에서 실행할 목적의 디스패처

구동 함수

  1. launch
    : job을 반환

  2. async
    : Deffered를 반환
    await() 함수 사용가능

  3. withContext
    : 병렬처리가 가능한 async와 달리 withContext는 순차 처리만 가능하다. 또 try~ catch로 예외처리가 가능하다
    코루틴 실행 도중 실행 환경을 바꾸고 싶을 때 사용한다.

https://hodie.tistory.com/77
https://todaycode.tistory.com/183
https://asuhdevstory.tistory.com/entry/%EC%BD%94%EB%A3%A8%ED%8B%B4-Scope%EB%8A%94-%EC%96%B4%EB%96%A4-%EC%A2%85%EB%A5%98%EB%93%A4%EC%9D%B4-%EC%9E%88%EC%9D%84%EA%B9%8C-CoroutineScope-LifecycleScope-ViewModelScope

profile
enjoy_error_message!

0개의 댓글