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/
https://developer.android.com/kotlin/coroutines/coroutines-adv?hl=ko
https://kotlinlang.org/docs/coroutines-basics.html#scope-builder
https://developer.android.com/topic/libraries/architecture/coroutines?hl=ko
https://jaejong.tistory.com/67
'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 |