coroutine
-
coroutine - runBlocking, coroutineScope, suspend개발 2023. 2. 28. 20:30
runBlocking runBlocking은 코루틴 월드에 있지 않는 곳과 코루틴 월드를 이어주는 대표적인 함수다. 일반 메인 함수에서는 launch, async 같은 코루틴을 실행할 수 없는데 runBlocking을 이용해 코루틴 월드에 진입하면 실행 할 수 있게 된다. 이름에서도 유추할 수 있듯이 runBlocking은 내부 코루틴 작업이 완료될 때까지 동안 쓰레드를 잠시 일시 중지(blocked)시킨다. 쓰레드를 마구잡이로 중단시키는건 비효율적인 작업이기 때문에 runBlocking을 사용하는 코드는 대부분 애플리케이션 최상위 계층에 존재한다. fun main() { runBlocking { launch { delay(2000) println("Hello1") } launch { delay(1000..
-
coroutine - launch, async, CoroutineContext개발 2023. 2. 28. 20:00
launch, async coroutine을 시작하는 방법은 launch, async가 있다. launch는 결과값을 반환하지 않고 async는 await를 이용해서 결과값을 반환할 수 있다. fun main() { ThreadTest().runCoroutine() } class ThreadTest { fun runCoroutine() = runBlocking { val jobs = ArrayList() (1..5).map { number -> val job = async { delay((Math.random() * 1000).toLong()) println("${Thread.currentThread().name} done, number: $number") increaseCounter() return@a..
-
Coroutine + Retrofit | Coroutine + Room개발/안드로이드 2021. 7. 22. 21:00
Coroutine + Retrofit Retrofit 2.6.0 버전부터 suspend 함수로 api를 작성할 수 있게 됐다. 다른 Retrofit 인터페이스처럼 어노테이션을 추가하고 suspend 함수를 추가하면 빌드 될 때 Retrofit 에서 전처리한다. interface LibraryApi { @GET("/1.0/new") suspend fun getNew() : BookListResp } suspend로 쓰였기 때문에, api 를 호출하는 부분에서도 suspend 함수를 받아서 처리할 수 있다. 예로 Repository 인 경우 suspend 함수를 이용해서 아래 코드로 표현이 가능하다. withContext를 받아서 I/O 쓰레드에서 실행하도록 변경해 Main 쓰레드 안전성이 보장됐다. cla..
-
suspend fun개발/안드로이드 2021. 7. 22. 20:00
코틀린에서 추가된 suspend 함수는 Coroutine 내에서만 실행 가능한 함수다. 블로그 글마다 suspend 함수에 대해서 각각 정의가 다른데 나는 suspend 함수를 Coroutine Context를 갖고 있는 함수 정도로 정의하고 싶다. 간단한 사용법 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) CoroutineScope(Dispatchers.Main).launch { val sum = suspendSum(1, 2) // no compile error Log.d("suspend sum", sum.toStr..
-
Kotlin - Coroutine개발/안드로이드 2021. 5. 21. 20:00
Coroutine을 공부할 때 당장 실행되는 코드를 짜려고 launch, async 함수부터 먼저 써보게 되는데(과거의 나) 이것보단 Coroutine을 이루는 구조가 무엇인지를 먼저 공부하고 유틸리티 함수를 사용하면 훨씬 이해하기가 쉽다. Coroutine을 이루는 구조는 크게 CoroutineScope과 CoroutineContext다. 아래 그림으로 보면 CoroutineScope이 CoroutineContext를 포함하는 관계다. 1. CoroutineScope CoroutineScope은 Coroutine이 활동할 수 있는 범위를 말한다. 예를 들어 Coroutine이 ViewModel의 생성주기 내에서만 동작하게 할 수 있고 Activity Lifecyle 생명주기를 따라서 동작하게 할 수 있..
-
Kotlin - Coroutine개발/안드로이드 2020. 4. 15. 22:47
Kotlin의 Coroutine은 비동기 작업을 지원하는 "lightweight threads" 인 컴포넌트다. 이미 안드로이드에 있는 AsyncTask와 비슷한 역할을 수행하지만 Coroutine은 특별한 오버라이드 함 수 없이 간단하게 구현이 가능하고 깊게 들어가면 세부 동작 방식과 구현 철학은 다르다. 이번 포스트에서는 Kotlin의 Coroutine에 대해서 전반적인 소개와 사용 방법을 소개하려고 한다. 먼저 Coroutine은 하나의 task가 아니라, 여러 개 순서가 정해진 sub-tasks의 집합이다. Coroutine에서는 여러 개의 sub-task가 존재하는데 이들의 실행 순서는 보장된(guaranteed) 순서로 실행이 된다. 즉 코드 상에서는 얘네들이 sequential 하게 짜여져 ..