이 글은 유튜브 강의인 새차원의 코틀린 코루틴을 보고 정리하여 작성한 글입니다.
https://www.youtube.com/playlist?list=PLbJr8hAHHCP5N6Lsot8SAnC28SoxwAU5A
coroutines 공식 문서 :
https://kotlinlang.org/docs/coroutines-overview.html
- "Co" : with 또는 together를 뜻한다.
- "routine" : 규칙적으로 하는 일의 통상적인 순서와 방법
- "Co" + "routine" 의 합성어 = 협동 루틴
- 함께 동작하면서 규칙이 있는 일의 순서
코루틴은 실행이 마지막으로 중단되었던 지점의 바로 다음의 장소에서 실행을 재개한다.
coroutine 에서 대해 궁금해서 찾아오시는 분들의 대부분은 안드로이드 개발자 일텐데,
위의 사진과 설명을 보면 딱 느낌이 오지 않나?
서버에 데이터 요청해서 받아올때, 필요 할 것 같지 않나???
(겁나게 복잡하고 긴 Code를 적으면서 개발해야하는 AsycnTask, Thread 를 안써도 될 느낌이다.)
이 이유 하나만으로도 무조건 Coroutines 을 배워야 하는 욕구가 솟구칠 것이다.
현재 코루틴은 코틀린에서 사용 되는데 이를 가장 적극적으로 채택하는 곳이 바로 구글이다.
안드로이드 공식 홈페이지에서 코루틴은 아래 처럼 정의 되어 있다.
https://developer.android.com/kotlin/coroutines
A coroutine is a concurrency design pattern that you can use on Android to simplify code that executes asynchronously.
: 코루틴은 비동기처리를 심플하게, 안드로이드에서 사용할수 있도록 하는, 동시성 디자인 패턴이다.
On Android, coroutines help to manage long-running tasks that might otherwise block the main thread and cause your app to become unresponsive.
: Android에서 코루틴은 메인 스레드를 차단하고 앱이 응답하지 않게 만들 수 있는 긴 작업을 관리하는 데 도움이 됩니다.
Coroutines are a Kotlin feature that converts async callbacks for long-running tasks, such as database or network access, into sequential code.
: 코루틴은 데이터베이스 또는 네트워크 액세스와 같은 긴 작업에 대한 비동기 콜백을 순차 코드로 변환하는 기능입니다.
Use suspend functions to make async code sequential
: 일시 중단 기능을 사용하여 비동기 코드를 순차적으로 만들어라.
즉. 서버에서 데이터를 가져오는 작업 같은 긴 백그라운 작업처리를 코루틴으로 처리하라 그말이다.
Understand Kotlin Coroutines on Android (Google I/O'19)
: https://www.youtube.com/watch?v=BOHK_w09pVA&t=667s
2019년. 코루틴을 소개하는 구글 컨퍼런스에서 설명하길...
우리는 꿈의 코드를 꿈꾸어 왔다. 바로 아래처럼...
fetchUserData() = 서버로 부터 유저 데이터를 가져옴
textView.text = user.name = 가져온 유저 데이터의 name 을 textview 에 표시
이렇게만 간단하게 코드를 짤수 있다면, 정말 환상적일것.
그러나……
메인스레드에서 네트워크 콜을 하여 에러가 발생됨...(서브스레드에서 작업해야 함.)
그렇다면 차선책으로 스레드에서 Network Call 을 해보자.
그렇다면 3번째 방법을 써보자.
대안 들이 모두 맘에 안든다. 한방에 해결 할 수 있는 코루틴을 보자.
코루틴은
1. Coroutines simplify async : 비동기를 심플하게
2. code by replacing callbacks : 콜백을 대체
1. 코루틴의 suspend 함수를 이용하여 callback 이나 blocking 이 일어나지 않는 코드를 작성함.
2. api.fetchUser() 함수가 동작할때 서버에 데이터 요청
3. 데이터가 도착하면, 데이터를 설정해준다.
지금 코틀린의 핵심이다. 안드로이그 개발자 or 스프링을 코틀린으로 작성하시는 분들에게는 무조건 알아야하는 기술이다.