Why coroutines?

Yes. Dominos~·2021년 9월 12일
0

새차원의코루틴

목록 보기
1/2
post-thumbnail

이 글은 유튜브 강의인 새차원의 코틀린 코루틴을 보고 정리하여 작성한 글입니다.
https://www.youtube.com/playlist?list=PLbJr8hAHHCP5N6Lsot8SAnC28SoxwAU5A



현재 플레이스토어에 등록된 앱의 약 70% 이상의 앱이 코틀린으로 개발되어 있다. 안드로이드 스튜디오 공식 문서에서도 권장사항으로 coroutine 을 이용하여 비동기 처리를 하라고 명시되어 있다.

coroutines 공식 문서 :
https://kotlinlang.org/docs/coroutines-overview.html

Coroutines 은 무엇인가?

  • "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
: 일시 중단 기능을 사용하여 비동기 코드를 순차적으로 만들어라.

즉. 서버에서 데이터를 가져오는 작업 같은 긴 백그라운 작업처리코루틴으로 처리하라 그말이다.



구글 IO 에서 코루틴

Understand Kotlin Coroutines on Android (Google I/O'19)
: https://www.youtube.com/watch?v=BOHK_w09pVA&t=667s

2019년. 코루틴을 소개하는 구글 컨퍼런스에서 설명하길...
우리는 꿈의 코드를 꿈꾸어 왔다. 바로 아래처럼...

  • Dream Code

fetchUserData() = 서버로 부터 유저 데이터를 가져옴
textView.text = user.name = 가져온 유저 데이터의 name 을 textview 에 표시

이렇게만 간단하게 코드를 짤수 있다면, 정말 환상적일것.
그러나……
메인스레드에서 네트워크 콜을 하여 에러가 발생됨...(서브스레드에서 작업해야 함.)



그렇다면 차선책으로 스레드에서 Network Call 을 해보자.

  • Dream Code 2
    데이터는 잘 가져오는데, 스레드 안에서 UI를 직접 변경할려고 하여 문제가 생김. (UI 변경 스레드를 따로 써야 함.)


그렇다면 3번째 방법을 써보자.

  • The OK Code
    CallBack 형태로 작성.
    서버로 부터 데이터를 받는 것은 스레드로 처리하고, 데이터를 가져왔을때 callback 을 실행하여, UI 업데이트 진행.
    원하는 대로 동작하지만, 콜백이 콜백을 부르는, 콜백 지옥의 위험이 있다. 그리고 Ui 그릴때 user 객체가 수없이 계속 바뀌거나 삭제, 재생성 하거나 하면 메모리 관리에 위험이 따른다.


대안 들이 모두 맘에 안든다. 한방에 해결 할 수 있는 코루틴을 보자.





나는야 코루틴

코루틴은
1. Coroutines simplify async : 비동기를 심플하게
2. code by replacing callbacks : 콜백을 대체
1. 코루틴의 suspend 함수를 이용하여 callback 이나 blocking 이 일어나지 않는 코드를 작성함.
2. api.fetchUser() 함수가 동작할때 서버에 데이터 요청
3. 데이터가 도착하면, 데이터를 설정해준다.



코루틴의 역사


지금 코틀린의 핵심이다. 안드로이그 개발자 or 스프링을 코틀린으로 작성하시는 분들에게는 무조건 알아야하는 기술이다.

profile
미래의 아들아~ 곧 만나러 갈게

0개의 댓글