와챠의 우당탕탕 코딩 일기장

[Android/Kotlin]코루틴(Coroutine) 정리 본문

코딩 일기장/Android(Kotlin)

[Android/Kotlin]코루틴(Coroutine) 정리

minWachya 2022. 2. 7. 21:04
반응형

코루틴이란?

루틴의 일종인 협동루틴(co + routine)으로,

비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴이다.

하나의 스레드 안에 여러개의 코루틴이 동시에 실행될 수 있는데,

이 때 하나의 스레드가 끝날 때까지 계속되는 것과 달리

코루틴은 실행 중간에 다른 작업을 하러 갔다가 돌아와서 다시 작업을 할 수 있다.

루틴?

루틴: 프로그램의 일부로서, 특정한 일을 실행하기 위한 일련의 명령

  • 메인 루틴: 
    • 프로그램 전체의 개괄적인 동작 절차를 표시
  • 서브 루틴:
    • 반복되는 특정 기능의 묶음
    • 함수가 함수 안에 있을 때 안쪽의 함수를 지칭

 

코루틴은 어떨 때 쓰이는가?

  1. 네트워크 리퀘스트(Retrofit...)
  2. 내부 DB 접근(SQLite...)
  3. 등등 백그라운드 태스크가 필요한 경우

코루틴 시작하기

1, dependency 추가

implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0"

최신 버전 확인: https://github.com/Kotlin/kotlinx.coroutines#android

 

2, Coroutine Scope(CoroutineContext)

= 새 코루틴 생성 + 동시에 실행될 job 그루핑

 

1, Main 

CoroutineScope(Main).launch { ... }

Main = 메인 스레드에 대한 Context, UI 갱신, Toast 등 View 작업에 사용

 

2, IO 

CoroutineScope(IO).launch { ... }

IO = 네트워크 리퀘스트, 내부 DB 접근 등 백그라운드에서 필요한 작업에 사용

 

3, Default 

CoroutineScope(Default).launch { ... }

Default = 크기가 큰 리스트 다루거나 필터링을 수행하는 등 무거운 연산이 필요한 작업세 사용

 

4, withContext

CoroutineScope(IO).launch { withContext(Main) { ... } }

코루틴 안에 또 다른 코루틴 생성 시에는 withContext 사용

 

5, withTimeoutOrNull

CoroutineScope(IO).launch { val result = withTimeoutOrNull(10000) { ... } }

ms초과하면 result에 null 반환


참고

반응형
Comments