rx와 함께 많이 듣는 코루틴입니다.
한번 코루틴에 대해서 알아보겠습니다.
간단하게 말하면 비동기 프로그래밍인데 얘가 어떻게 동작하는지 알 수 있는 매우매우 간단한 예제를 보겠습니다.
간단하게 테스트를 찍어보겠습니다.
위에서 볼 수 있듯이, 순차적으로 진행되고, 메인쓰레드가 실행됩니다.
그러면 코루틴을 이용하면 어떻게 되는지 보겠습니다.
위와 같이 worker thread가 동작하고 비동기적으로 이루어지는 것을 볼 수 있습니다.
흔히 보는 rxJava(rxKotlin)과 다른 점이 무엇일까 살펴보면은
- Rxjava
Observable pattern으로 subscribe
들어온 데이터를 stram으로 내보낸다.
중간에 데이터가 변환되는걸 stream을 통해서 확인 가능
- Coroutines
누구나 아는 함수를 호출하고 return이 오기 전까지 기다리고, return 온 데이터를 가지고 다음 처리
- Thread
모든걸 직접 구현(피곤함)
자, 여기까지 알아봤고 그 다음 계속 쓰레드에 대해서 알아보겠습니다.
CoroutineScope(Dispatchers.IO).launch {}
로 워커쓰레드에서 실행한 것을
private suspend test(){
withContext(Dispatchers.Main){}
}
다시 메인쓰레드로 쓰레드를 체인지 할 수 있습니다.
그리고 async await를 통해서 동기 비동기를 선택해줄 수 있습니다.
또한, structured concurrency, unstructured concurrency 등을 선택해줄 수 있습니다.
또한, Viewmodelscope과 lifecyclescope를 이용해서 코루틴의 생명주기를 관리해줄 수 있습니다.
또한 코루틴을 이용하다보면 flow라는 친구가 나오는데 이 친구는
비동기로 동작하면서 여러개의 값을 반화하는 function을 만들 때 사용하는 builder입니다.
- 참고
https://thdev.tech/android/2019/11/30/RxJava-Corotuines-01/
RxJava와 Coroutines을 간단하게 알아보자. |
I’m an Android Developer.
thdev.tech
https://developer.android.com/kotlin/coroutines/coroutines-adv?hl=ko
Kotlin 코루틴으로 앱 성능 향상 | Android 개발자 | Android Developers
Kotlin 코루틴을 사용하면 네트워크 호출이나 디스크 작업과 같은 장기 실행 작업을 관리하면서 앱의 응답성을 유지하는 깔끔하고 간소화된 비동기 코드를 작성할 수 있습니다. 이 주제에서는 And
developer.android.com
https://kotlinlang.org/docs/coroutines-basics.html#scope-builder
Coroutines basics | Kotlin
kotlinlang.org
https://developer.android.com/topic/libraries/architecture/coroutines?hl=ko
수명 주기 인식 구성요소와 함께 Kotlin 코루틴 사용 | Android 개발자 | Android Developers
Kotlin 코루틴은 비동기 코드를 작성할 수 있게 하는 API를 제공합니다. Kotlin 코루틴을 사용하면 코루틴이 실행되어야 하는 시기를 관리하는 데 도움이 되는 CoroutineScope를 정의할 수 있습니다. 각
developer.android.com
https://jaejong.tistory.com/67
[Kotlin] 코루틴 #7 - Flow
코루틴 #7 - Flow (플로우) Coroutine 이전 글 코루틴 #1 - 기본 코루틴 #2 - CoroutineContext와 CoroutineScope란? 코루틴 #3 - suspend Function (중단함수) 코루틴 #4 - CoroutineBuilder와 ScopeBuilder 코..
jaejong.tistory.com
'Android(Kotlin)' 카테고리의 다른 글
Android MVC MVVM MVP (0) | 2021.08.24 |
---|---|
Clean Architecture (0) | 2021.08.24 |
Android Workmanager (0) | 2021.08.22 |
Android Room Google Ex (0) | 2021.08.22 |
Unable to load class 'javax.xml.bind.JAXBException'. (0) | 2021.08.22 |