Coroutines 15

[Kotlin] Coroutines - 한 Scope 내에서의 계층 관계

#1 이전 글 [Kotlin] Coroutines - Coroutine builder#1 Coroutine builder kotlinx-coroutines-coreCore primitives to work with coroutines. Coroutine builder functions: Coroutine dispatchers implementing CoroutineDispatcher: More context elements: Synchronization primitives for coroutines: Top-level suspendinkenel.tistory.com위 게시글의 CoroutineScope의 생략에 대해 다룬 #6-4에서 이어지는 글이다. 이전 글에선 CoroutineScope을 생략하는 게..

[Kotlin] Coroutines - LiveData Builder

본 게시글의 Coroutine 개념은 Android 내에서 사용되는 것을 전제로 작성되었다. #1 Coroutine이 쓰인 LiveData 예제 - 전통적인 방법#1은 LiveData 값 할당에 Coroutines가 쓰인 샘플 프로젝트다. #1-1 build.gradle.kts (Module)plugins {    ...}android {    ...}dependencies {    ...    //  Coroutines    val coroutinesVersion = "1.7.3"    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion")    implementation("org.jetbrains.kotlin..

[Kotlin] Coroutines - LifecycleScope

본 게시글의 Coroutine 개념은 Android 내에서 사용되는 것을 전제로 작성되었다. #1 이전 게시글 [Kotlin] Coroutines - ViewModelScope본 게시글의 Coroutine 개념은 Android 내에서 사용되는 것을 전제로 작성되었다. #1 ViewModel 속 전통적인 방식의 Coroutinesimport androidx.lifecycle.ViewModel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dkenel.tistory.com이전 게시글에서 ViewModel의 수명주기를 참조해, ViewModel이 소멸될 때 알아서 종료되는 CoroutineScope에 대해 다뤘다. 이번엔 그 참조의 대상..

[Kotlin] Coroutines - ViewModelScope

본 게시글의 Coroutine 개념은 Android 내에서 사용되는 것을 전제로 작성되었다. #1 ViewModel 속 전통적인 방식의 Coroutinesimport androidx.lifecycle.ViewModelimport kotlinx.coroutines.CoroutineScopeimport kotlinx.coroutines.Dispatchersimport kotlinx.coroutines.Jobimport kotlinx.coroutines.launchclass SampleViewModel : ViewModel() {    private val myJob = Job()    private val myScope = CoroutineScope(Dispatchers.IO + myJob)    fun s..

[Kotlin] Coroutines - 스레드 전환

본 게시글의 Coroutine 개념은 Android 내에서 사용되는 것을 전제로 작성되었다. #1 Background Thread의 한계 - UI 조작 불가능...class MainActivity : AppCompatActivity() {    ...    override fun onCreate(savedInstanceState: Bundle?) {        ...        btnDwCoroutine.setOnClickListener {            CoroutineScope(Dispatchers.IO).launch {                downloadData()            }        }    }    private fun downloadData() {        ..

[Kotlin] Coroutines - Parallel Decomposition

#1 작업의 처리 방식#1-1 가정위와 같은 총 7개의 작업이 있다고 가정한다. 각 작업이 소요 시간은 5, 10, 15, 10, 20, 25, 5다. #1-2 전통적인 방법전통적인 방법은 선형적(Serial)으로 작업을 수행한다. #1-3 전통적인 방법의 구현import kotlinx.coroutines.*data class Food(val name: String, val cookingTimeInSeconds: Long)suspend fun cook(food: Food) { delay(1000 * food.cookingTimeInSeconds) println("${food.name} 완료")}fun main() { val foods = arrayOf( Food("국밥", 5..

[Kotlin] Couroutine - 스레드(Thread)와 스레드 풀(Thread Pool)

#1 스레드 (Thread)#1-1 개념다른 용어들과의 관계를 통해 '스레드'라는 개념의 윤곽을 잡는다.#1-2 스레드의 실시간성이 예시 도식도에서 시점 A에서와 시점 B에서의 스레드는 각각 1개와 2개와 그 갯수가 서로 다르다. 프로세스는 프로그램의 실행 중인 인스턴스이기 때문에, 스레드는 실시간성을 지닌다. 예를 들어, 사람을 프로세스라고 비유해보겠다. 통화를 하면서 요리를 하는 사람은 2개의 병렬 스레드를 지니고 있다고 볼 수 있다. 그러다가 통화가 종료되어 요리에만 집중하면, 그 사람은 요리라는 단일 스레드만 있는 프로세스가 된다. 이와 같이 프로세스가 어느 시점 어느 순간에 있느냐에 따라서 스레드의 갯수는 얼마든지 변할 수 있다. #2 스레드 풀 (Thread Pool)#2-1 개념프로그램이 명..

[Kotlin] Coroutines - suspend 키워드

본 게시글의 Coroutine 개념은 Android 내에서 사용되는 것을 전제로 작성되었다. #1 이전 글 [Kotlin] Coroutines - 동기 코드, 비동기 코드#1 동기 코드 vs 비동기 코드 #1-1 구분하기 코루틴을 제대로 사용하기 위해선 먼저, '동기 코드'와 '비동기 코드(= 코루틴 코드)'를 명확하게 구분할 줄 알아야 한다. 둘을 구분하는 기준은 쉽게 말kenel.tistory.com해당 게시글을 읽어야 본 게시글을 이해할 수 있다. #2 suspend 키워드#2-1 suspend와 resume비동기 코드, 즉 코루틴은 suspend(기다림)이 필요한 코드다. 기다림이 있다는 건 resume(다시 움직임, 재개)도 있다는 말이다. 코루틴을 기다리게(suspend) 만들면, 해당 코루틴..