Kotlin Coroutine을 알아보자

312·2024년 5월 21일

Android 알아보기

목록 보기
3/7


(https://developer.android.com/kotlin/coroutines?hl=ko)

오늘은 Kotlin에서의 Coroutine을 알아보자.
Coroutine은 정말 중요하고 깊이있는 주제인 만큼 이 글에서는 간단하게만 소개하려고 한다.

What is Coroutine?

개발에서 Coroutine은 비동기적인 프로그래밍을 할때 사용한다.

Andorid에서는 통신 중에 응답을 기다리거나 DB 접근, 입출력 등의 다양한 동시작업에서 활용하게 된다.

이러한 작업을 동시성 없이 처리하게 되면, 응답을 받기까지 메인 스레드 블로킹이 발생해 UI가 멈추거나 앱 전체가 응답 없음 상태가 된다.

Kotlin Coroutine은 비동기 프로그래밍을 단순하고 효율적으로, 비동기 작업을 동기 코드처럼 작성하게 해준다.

Coroutine Scope?

CoroutineScope는 Coroutine을 관리하는 범위다.

모든 Coroutine은 Scope내에서 실행되어야 하며 GlobalScope와 CoroutineScope, ViewModelScope가 존재한다.

GlobalScope는 앱의 생명주기와 함께 동작해 장시간 실행되는 Coroutine에 적합하다.

반대로 CoroutineScope는 통신이나 DB등의 단기간 작업의 생명 주기와 함께 동작할 때 쓰인다.

ViewModelScope는 Jetpack의 ViewModel이라는 컴포넌트의 생명주기와 함께 사용된다.

What is Dispatcher?

CoroutineScope의 경우에는 Dispatcher을 지정해 줄 수 있다.
Dispatcher은 4가지 타입으로 각 상황에 효율적인 스레드를 지정할 수 있다.

Dispatchers.Default:
일반적인 작업에 사용하며 CPU를 많이쓰는 연산 작업에 특화되어있다.

Dispatchers.IO:
통신이나 파일의 입출력, 통신이나 DB에 적합하다.

Dispatchers.Main:
안드로이드 UI등을 담당하는 메인 스레드이다.

Dispatchers.Unconfined:
호출한 context를 기반으로 중단 후 재실행될때 재실행한 context를 사용하는 Dispatcher이다.

How To Coroutine?

coroutine을 시작하는 블록은 launch와 async 두가지 블록이 존재한다.

실행 메소드

launch는 상태 관리,결과를 반환하지 않는 Coroutine을 실행한다. (Job 반환)

async는 상태도 관리하지만 결과도 반환하는 Coroutine을 실행한다 (Deferred 반환)

상태 관리 메소드

cancel은 coroutine을 정지시키며 하위 coroutine까지 모두 정지시킨다.

delay는 지정된 시간만큼만 일시 중단한다.

delay(1000L)

join은 coroutine 내부의 여러 블록이 존재할 때 join의 Job을 완료된 후 실행시킨다.

활용 예시

fun coroutineLoading(
        dispatcher: CoroutineDispatcher = Dispatchers.IO,
        operation: suspend () -> Unit
    ) {
        viewModelScope.launch(dispatcher) {
            try {
                startLoading()
                operation()
            } catch (e: Exception) {
                e.message?.let { showError(it) }
            } finally {
                finishLoading()
            }
        }
    }

모든 ViewModel을 사용하는 BaseViewModel에 작성한 함수이다.
파라미터로 어떤 코루틴을 사용할건지, 어떤 함수를 사용할건지 받고 기능을 사용할 때 로딩 시작을, 끝낼 때 로딩을 종료해서 UI에 로딩 화면이 보여지게 작성해봤다.

Coroutine!

이외에도 다양한 coroutine의 메소드들이 존재하고 Kotlin Coroutine은 이를 통해 비동기 프로그래밍을 간단하게 만들며, 가독성 높은 코드를 작성할 수 있게 한다.

사용할때는 단순히 통신이나 DB같은 응답이 필요한 부분에만 기본적인 기능으로 적용했지만, UI 렌더링이나 이미지 프리로딩 등 좀 더 효율적인 구조에 활용해볼 수 있겠다고 생각한다.

profile
안드로이드 개발자 이상일입니다.

0개의 댓글