Skip to content

Coroutine

박진성 edited this page Dec 14, 2023 · 1 revision

개념

  • Coroutine 은 가벼운 스레드 이다
  • Scope 안에서는 suspend func 만 사용 가능하다
  • **비선점형 멀티태스킹**이 가능하다
    • 중단 지점을 만나지 않는 한, 제어권 양도하지 않고 이어서 계속 실행
  • **병행성**은 제공하지만, **병렬성**은 제공하지 않는다!



Thread VS Coroutine

공통점

  • 비동기 작업을 하기 위해 사용

차이점

  • 스레드 : 여러개의 작업을 병렬로 수행하며 비동기처리한다
    • 일꾼 두명 각자 작업
  • 코루틴 : 여러개의 작업을 쪼개서 나눠 동시에 작업 수행하는 방식
    • 일꾼 한명이 번갈아 작업
    • 성능면에서 더 좋음!!

캡처.JPG


Coroutine vs RxJava / RxKotlin

  • 양쪽다 비동기 처리를 위해 굉장히 많이 사용하는 기술 진영이다
  • Coroutine은 RxJava / RxKotlin 보다 상대적으로 러닝커브가 낮고, 동기코드 작성시와 동일한 가독성과 간결함을 유지할 수 있다

→ 예시) RxJava

Flowable.range(0, 10)
        .observeOn(Schedulers.io())
        .subscribeOn(Schedulers.io())
        .map {
            it + 1
        }
        .filter {
            it > 4
        }
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(
                {
                    println(it)
                },
                {
                    it.printStackTrace()
                }
        )

→ 예시) Coroutine

CoroutineScope(Dispatchers.Default).launch {
    (0..9).map { it + 1 }
            .filter { it > 4 }.forEach { 
                launch(Dispatchers.Main) {
                    println(it)
                }
            }
}

니밥내밥에서 Coroutine

  • ViewModel 에서 네트워크 통신을 위한 ViewModelScope 사용
  • Fragment 및 Activity 에서, Flow Collect를 위한 repeatOnLifecycle 사용
Clone this wiki locally