전체 233

[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) 만들면, 해당 코루틴..

[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 suspending functions: NameDescriptiondelayNon-blockingkotlinlang.orgrunBlocking을 제외한 코루틴 빌더는 CoroutinesScope의 확장 함수(Extension functions)다. CoroutineScop..

[Kotlin] Coroutines - CoroutineScope, CoroutineContext

본 게시글의 Coroutine 개념은 Android 내에서 사용되는 것을 전제로 작성되었다. #1 CoroutineScope...import kotlinx.coroutines.*class MainActivity: AppCompatActivity() {    ...    val btnDownloadSampleData = findViewById(R.id.btnDownloadSampleData)        btnDownloadSampleData.setOnClickListener {        // 코루틴의 영역        CoroutineScope(Dispatchers.IO).launch {            sampleFunction()        }    }        ...}코루틴은 기본적으로..

[Kotlin] Coroutines - Suspend vs Block

#1 이전 글 [Kotlin] Coroutines - 동기 코드, 비동기 코드#1 동기 코드 vs 비동기 코드 #1-1 구분하기 코루틴을 제대로 사용하기 위해선 먼저, '동기 코드'와 '비동기 코드(= 코루틴 코드)'를 명확하게 구분할 줄 알아야 한다. 둘을 구분하는 기준은 쉽게 말kenel.tistory.com이전 글에서 다룬 Suspend라는 개념은, "스레드를 Block한다"라고 말할 때의 Block과 비슷하면서도 다른 개념이다. 둘의 공통점과 차이점을 짚어본다. #2 Suspend vs Block#2-1 공통점둘 다 스레드의 동작을 멈춘다. 하지만, 이 '멈춤'이라는 것은 2가지 양상을 띄며, 서로 구분된다. #2-2 차이점비유를 통해 설명하겠다.어떤 재미있는 동영상이 재생되고 있는 상황이다.1...