반응형

이 게시물은 다음 링크를 참조하여 학습했습니다.

 

Android의 Kotlin 코루틴  |  Android 개발자  |  Android Developers

Android의 Kotlin 코루틴 코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴입니다. 코루틴은 Kotlin 버전 1.3에 추가되었으며 다른 언어에서 확

developer.android.com

 

[Android] 코틀린(Kotlin) 코루틴(Coroutine) 한 번에 끝내기

1. 코틀린의 코루틴(Coroutine) 이란? 안드로이드 프로그래밍을 코틀린으로 할 때 코루틴 이라는 것을 사용할 수 있는데요? 코틀린의 '코'를 따서 'Ko'루틴 인줄 알았지만 사실 코루틴의 코는 co(함께,

whyprogrammer.tistory.com

 

[kotlin] 코루틴 공부하기 (비동기 처리, 서버 딜레이 처리)

빌어먹을 코루틴... 저번에 공부하다가 도저히 못해먹겠어서 포기했다가 오늘 다시 도전했다. 항상 느끼는 거지만 아무것도 모를 땐 그렇게 어렵게 느껴지다가 또 막상 성공하면 아 이걸 왜 이

todaycode.tistory.com

 

[안드로이드 스튜디오 정리#12] 비동기 프로그래밍

이 게시물은 다음 링크를 참조하여 학습했습니다. Thread  | Android 개발자  | Android Developers developer.android.com Runnable  | Android 개발자  | Android Developers developer.android.com Handler..

seminzzang.tistory.com

 

[Coroutine] 3. Coroutine의 Dispatcher 란 무엇인가?

Coroutine을 공부하면서 Dispatcher에 대해 상세히 설명된 글이 없어서 이 글을 작성하게 되었다. 많은 사람들에게 도움이 되길 바란다. Dispatcher  코루틴을 시작하게 되면, Dispatcher란 단어를 가장 먼

kotlinworld.com

 

Kotlin 코루틴으로 앱 성능 향상  |  Android 개발자  |  Android Developers

Kotlin 코루틴으로 앱 성능 향상 Kotlin 코루틴을 사용하면 네트워크 호출이나 디스크 작업과 같은 장기 실행 작업을 관리하면서 앱의 응답성을 유지하는 깔끔하고 간소화된 비동기 코드를 작성할

developer.android.com

이번 게시물은 Coroutine에 대해서 정리하려 한다.

Retrofit을 이용해 데이터를 얻는 작업을 View Model에 적용시키려 하니 Repository가 필요하단것을 알게 되었고, Repository에서 Retrofit을 사용하기 위해서는 Coroutine이 필요하단걸 알게 되어서 공부하고 정리하게 되었다.

항상 생각하는거지만 새로운걸 배울때는 두렵지만, 막상 배우면 생각보다 할만한것 같다...

1-1. Coroutine?

처음에 코루틴이 코틀린의 '코'를 따서 만든것인줄 알았다. 코틀린을 위한 비동기 라이브러리인거라 생각했다....

근데 다른 블로그 게시글들을 보니 생각 외로 나처럼 생각한 사람이 많았던것 같다.

코루틴의 코는 co(함께, 동시에)의 의미를 갖고 있다고 한다. 

즉, 동시성 프로그래밍을 가능하게 한다는 것이다.

 

1-2. Dependency

코루틴의 경우 안드로이드 버전이 최신버전이면 의존성을 따로 추가해주지 않아도 된다고 한다.

다행히도 나는 안드로이드 스튜디오 업데이트를 최근에 해줘서 의존성을 추가하지 않고 사용했다.

만약, 의존성을 추가해야 될 정도로 구버전이라면 안드로이드 스튜디오를 최신버전으로 업데이트 해주자!(업데이트해서 안좋을게 없다)

 

2-1. Scope

코루틴은 스코프안에서 실행된다.

코루틴에서 사용하는 스코프들은 아래 링크에 정리되어있다.

 

androidx.lifecycle  |  Android Developers

androidx.camera.video.internal.utils

developer.android.com

CoroutineScope : 특정 이벤트에 사용하기 적합. 필요할때만 열고 닫아줄 수 있다.

viewModelScope : ViewModel이 사라질 때 같이 사라진다. ViewModel 인스턴스에서 사용하기에 적합하다.

 

2-2. Dispatcher

'Dispatch'는 '보내다'라는 의미를 갖고 있다. 즉, Dispatcher는 무언가를 보내주는 역할을 한다.

Coroutine에서 Dispatcher는 Coroutine을 Thread에 보내는 역할을 한다.

안드로이드에서는 Dispatcher가 구현되어 있기 때문에 우리는 구현된 Dispatcher를 사용하기만 하면 된다!

안드로이드에서 기본적으로 제공하는 Dispatcher는 다음과 같다.

Dispatcher.Main : 메인스레드에서 코루틴을 실행하는 디스패처, UI 작업에만 사용해야 한다.

Dispatcher.IO : DB또는 네트워크 IO 작업에 최적화된 디스패처

Dispatcher.Default : CPU를 많이 사용하는 작업을 하는데 최적화된 디스패처(정렬 or 파싱 등 무거운 작업)

 

2-3. 시작하기

Coroutine은 다음 두가지 방법으로 실행할 수 있다.

launch : 새 코루틴을 시작하고 결과를 반환하지 않는다. '실행 후 삭제' 작업에 사용

async : 새 코루틴을 시작하고 await이라는 정지 함수를 통해 결과 반환을 허용한다.

await은 일반함수 내부에서는 사용할 수 없으므로 launch{} 내부에서 사용한다.

 

2-4. suspend?

suspend 키워드는 이 함수가 코루틴 안에서 실행되어야 한다는 키워드이다.

android 공식문서에서는 suspend 키워드를 다음과 같이 정의 한다.

"suspend는 현재 코루틴 실행을 일시중지하고 모든 로컬 변수를 저장합니다."

내가 이해한 바로는 여러개의 하나의 스레드에서 여러 개의 코루틴이 실행될 때의 일시중지를 의미하는 것 같다.

아래 게시물을 보고 오면 무슨말인지 알 수 있을 것이다.

 

[Coroutine] 5. suspend fun의 이해

일시중단 가능한 코루틴 코루틴은 기본적으로 일시중단 가능하다. launch로 실행하든 async로 실행하든 내부에 해당 코루틴을 일시중단 해야하는 동작이 있으면 코루틴은 일시 중단된다. 예시로

kotlinworld.com

즉, 단일 코루틴에서의 비동기가 아닌 한 개 이상의 코루틴이 작업을 할 때 suspend 함수를 통해 스레드를 점유한다고 이해했다.

 

=======

느낀점

1. 코루틴 뭔가 이해가 될것 같으면서도 아직은 어렵다.... 당장 간단한 기능만은 사용할 수 있을 것 같지만 좀더 공부를 해야겠다.

2. 공식문서에 withContext라는 키워드가 있었는데, 아직 확실하게 이해된 내용이 아니라 게시글에 작성을 못했다. 성능적으로 확실한 이점이 있는거 같은데 빨리 공부해봐야겠다.

3. 이 게시물 작성하려고 코루틴 다시 찾아보다가 ViewModel에서 Retrofit 사용하는거 해결했다. 공식문서 정독하자..... 

 

++ 2022.06.09 

아래 게시물에 자세히 정리했습니다 :)

 

[Kotlin #11] Coroutines

이 게시물은 다음 링크를 참조하여 학습했습니다 Coroutines guide | Kotlin kotlinlang.org Kotlin Coroutine Basic-1 Before start work on the coroutine, First, we have to know about the most common com..

seminzzang.tistory.com

 

반응형

+ Recent posts