와챠의 우당탕탕 코딩 일기장
[Android/Kotlin]코루틴(Coroutine) 정리 본문
반응형
코루틴이란?
루틴의 일종인 협동루틴(co + routine)으로,
비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴이다.
하나의 스레드 안에 여러개의 코루틴이 동시에 실행될 수 있는데,
이 때 하나의 스레드가 끝날 때까지 계속되는 것과 달리
코루틴은 실행 중간에 다른 작업을 하러 갔다가 돌아와서 다시 작업을 할 수 있다.
루틴?
루틴: 프로그램의 일부로서, 특정한 일을 실행하기 위한 일련의 명령
- 메인 루틴:
- 프로그램 전체의 개괄적인 동작 절차를 표시
- 서브 루틴:
- 반복되는 특정 기능의 묶음
- 함수가 함수 안에 있을 때 안쪽의 함수를 지칭
코루틴은 어떨 때 쓰이는가?
- 네트워크 리퀘스트(Retrofit...)
- 내부 DB 접근(SQLite...)
- 등등 백그라운드 태스크가 필요한 경우
코루틴 시작하기
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 반환
참고
- https://blog.yena.io/studynote/2020/04/26/Android-Kotlin-Coroutine.html
- https://wooooooak.github.io/kotlin/2019/08/25/%EC%BD%94%ED%8B%80%EB%A6%B0-%EC%BD%94%EB%A3%A8%ED%8B%B4-%EA%B0%9C%EB%85%90-%EC%9D%B5%ED%9E%88%EA%B8%B0/
- https://medium.com/@sunminlee89/%EC%BD%94%ED%8B%80%EB%A6%B0-%EC%BD%94%EB%A3%A8%ED%8B%B4-coroutine-%EA%B8%B0%EC%B4%88-1342ae6916ce
반응형
'코딩 일기장 > Android(Kotlin)' 카테고리의 다른 글
[Android/Kotlin]Spinner hint/Spinner underline (0) | 2022.02.18 |
---|---|
[Kotlin]let/with/run/apply/also (0) | 2022.02.08 |
갤러리에서 가져온 이미지가 회전되어져 있을 때(ExifInterface) (0) | 2022.01.31 |
Spinner 설정 (0) | 2022.01.25 |
Android 12 Splash + 앱 시작 시간 공부 (2) | 2022.01.24 |
Comments