
오늘은 Android의 비동기 처리 방법인 코루틴에 대해 소개해보려 합니다. 먼저 코루틴은 Java에서는 불가능하고 Kotlin에서만 가능합니다. 코루틴을 활용하여 API 호출 및 DB Connect와 같은 비동기 작업 처리 코드의 가독성과 성능을 높여줄 수 있습니다.
만약, API 호출이나 DB Connect 등과 같이 무거운 작업들을 비동기적으로 처리하지 않는다면 메인 스레드에 무리가 갈 수 있고, ANR이 발생할 수 있습니다.
1. Coroutine이란?
코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴입니다.
Android에서 코루틴은 기본 스레드를 차단하여 앱이 응답하지 않게 만들 수 있다는 장기 실행 작업을 관리하는데 도움이 됩니다. 코루틴을 활용하면 생산성 향상과 간결한 앱 코드를 작성할 수 있게 되므로 많은 개발자들이 사용하는 기술입니다.
2. 기능
비동기 프로그래밍에 권장되는 코루틴의 주목할만한 기능은 아래와 같습니다.
| 기능 | 설명 |
| Lightweight | 코루틴을 실행 중인 스레드를 차단하지 않는 suspension을 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있습니다. suspension은 많은 동시 작업을 지원하면서도 스레드 차단보다 메모리를 절약합니다. |
| Fewer memory Leaks | 구조화된 동시 실행을 사용하여 범위 내에서 작업을 실행합니다. |
| Built-in cancellation support | 실행중인 코루틴 계층 구조를 통해 자동으로 취소가 전달됩니다. |
| Jetpack intergration | 많은 Jetpack 라이브러리에 코루틴을 완전히 지원하는 확장 프로그램이 포함되어 있습니다. 일부 라이브러리는 구조화된 동시 실행에 사용할 수 있는 자체 코루틴 범위도 제공합니다. |
3. Coroutine Scope?
코루틴 스코프는 미리 정의된 interface 형태로 더 이상 작업이 필요하지 않을 때 코루틴 스코프를 취소하여 메모리 누수를 방지할 수 있습니다.
| Coroutine Scope | 설명 |
| Global Scope | 앱의 생명주기와 함께 동작하기 때문에 앱의 시작부터 종료까지 실행되는 코루틴의 경우에 사용합니다. |
| Coroutine Scope | 필요할 때만 열고 완료되면 닫아주는 스코프로, 사용자의 이벤트로부터 작업을 할 때 사용합니다. |
| ViewModel Scope | ViewModel 컴포넌트 사용 시 ViewModel 인스턴스에서 사용하기 위해 제공되는 스코프입니다. ViewModel이 소멸될 때 자동으로 취소됩니다. |
Global Scope를 제외하고 디스패처를 지정할 수 있는데, 이는 코루틴이 실행될 스레드를 지정하는 역할을 합니다.
4. Dispatchers?
코루틴을 만든 다음 해당 코루틴을 Dispatcher에 전달하면 Dispatcher는 자신이 관리하는 스레드풀 내의 스레드의 부하 상황에 맞춰 코루틴을 배분하는 역할을 합니다. Android에는 이미 Dispatcher가 생성되어 있어 별도로 생성하거나 정의할 필요가 없습니다.
| Dispatcher | 설명 |
| Dispatcher.Default | 기본 스레드 외부에서 실행하도록 최적화, CPU를 많이 쓰는 작업에 최적화(데이터 정렬, 복잡한 연산 (ex : JSON 파싱) 등) |
| Dispatchers.IO | 디스크 또는 네트워크 I/O 작업을 실행하는데 최적화 (ex : API 통신) |
| Dispatchers.Main | Android 메인 스레드에서 코루틴을 실행, UI와 상효작용하는 작업을 실행하기 위해서만 사용해야함 |
마치며
간단하게 코틀린의 코루틴에 대해 정리를 해보았습니다. 제가 안드로이드 개발을 하며 API 호출을 하는 경우가 많았는데, 자바에서 코틀린으로 전환하고 코루틴을 사용해 보며 정말 편리하다고 생각했습니다. 실제로 MVVM 패턴 적용 시 ViewModel Scope도 활용하는 경우가 많았습니다. 아직 부족한 점이 많다고 느껴 꾸준히 공부해보려 합니다.
다음에는, 코루틴을 활용한 간단한 예제를 준비해 보겠습니다 ㅎ
모두 즐코😁
Reference
Android의 Kotlin 코루틴 | Android Developers
Android의 Kotlin 코루틴 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동
developer.android.com