Coroutines

    Coroutines와 Channels 튜토리얼 - 1. 시작하기 전 준비하기

    Coroutines와 Channels 튜토리얼 - 1. 시작하기 전 준비하기

    이 튜토리얼에서는 IntelliJ IDEA를 사용해, 실행중인 Thread나 Callback을 블록하지 않고 코루틴을 사용하여 네트워크 요청을 수행하는 방법을 살펴볼 것이다. 📖 당신은 Kotlin 기초 구문에 익숙해야 하지만, Coroutines에 대한 사전 지식은 필요하지 않습니다. 당신은 다음의 사항들에 대해 배울 것입니다. 네트워크 요청을 하기 위해 일시 중단 함수를 왜 그리고 어떻게 사용해야 하는지 Coroutines을 사용하여 요청을 동시에 보낼 수 있는 방법 서로 다른 Coroutines 간에 Channels를 이용하여 정보를 공유하는 방법 네트워크 요청들을 위해서 Retrofit 라이브러리를 필요로 하지만, 이 튜토리얼에서 보여지는 접근 방식은 보편적이고 Coroutines를 지원하는 다른..

    IntelliJ IDEA 사용해서 Coroutine 디버깅 하기

    IntelliJ IDEA 사용해서 Coroutine 디버깅 하기

    이 튜토리얼은 IntelliJ IDEA를 사용해 Kotlin Coroutine을 만들고 디버깅하는 방법을 설명한다. 이 튜토리얼에서는 독자들이 Coroutine 개념에 대한 사전 지식이 있다고 가정한다. Coroutine 생성하기 1. Intellij IDEA에서 Kotlin 프로젝트를 연다. 만약 프로젝트가 없다면 하나를 새로 만든다. 2. kotlinx.coroutines 라이브러리를 Gradle 프로젝트에서 사용하기 위해서 다음 종속성을 build.gradle(.kts)에 추가한다. Kotlin Gradle dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") } Groovy Gradle depende..

    Coroutine 공유 상태와 동시성 2편 - Thread-safe한 데이터 구조, 세밀하게 Thread 제한하기, 굵게 Thread 제어하기

    Thread-safe한 데이터 구조 Threads과 Coroutines에 모두 작동하는 일반적인 해결 방법은 공유 상태에 수행되어야하는 모든 동작에 대한 필수적인 동기화를 제공하는 스레드 안전한(동기화된, 선형성, 원자성 이라고도 부름) 데이터 구조를 사용하는 것이다. 간단한 카운터에 대해서는 incrementAndGet 이라 불리는 원자적인 동작을 제공하는 AtomicInteger 클래스를 사용할 수 있다. val counter = AtomicInteger() fun main() = runBlocking { withContext(Dispatchers.Default) { massiveRun { counter.incrementAndGet() } } println("Counter = $counter") } ..

    Coroutines 일시중단 함수 구성하기 2편 - 비동기 스타일 함수, 구조화된 동시성과 async

    비동기 스타일 함수 구조적인 동시성에서 벗어나기 위해 GlobalScope를 참조하는 async Coroutine Builder을 사용하여 doSomethingUsefulOne 및 doSomethingUsefulTwo을 실행하는 비동기 스타일의 함수를 정의할 수 있다. 이러한 함수들의 이름은 "...Async"를 접미사를 가지도록 하여, 함수들이 비동기 계산을 시작하기만 하고 결괏값을 얻기 위해 Deffered 값을 사용해야 한다는 것을 강조한다. 📖 GlobalScope는 사소하지 않은 역효과를 일으킬 수 있는 섬세하게 다뤄야 하는 API이다. 그 중 하나는 아래에서 설명될 것이며, 명시적으로 GlobalScope를 @OptIn(DelicateCoroutinesApi::class)과 함께 사용되도록 해..

    Coroutines 일시중단 함수 구성하기 1편 - 기본적인 순차 처리, async를 사용한 동시성, async lazy하게 시작하기

    Coroutines 일시중단 함수 구성하기 1편 - 기본적인 순차 처리, async를 사용한 동시성, async lazy하게 시작하기

    이 섹션은 일시 중단 함수를 구성하기 위한 다양한 접근 방식을 다룬다. 기본적인 순차 처리 일종의 원격 서비스 호출이나 계산 같은 두 유용한 일시 중단 함수들이 서로 다른 위치에 정의되어 있다고 가정해보자. 이들은 유용한척 하지만 실제로는 이 예제의 목적을 위해 1초간 delay가 일어난다. suspend fun doSomethingUsefulOne(): Int { delay(1000L) // pretend we are doing something useful here return 13 } suspend fun doSomethingUsefulTwo(): Int { delay(1000L) // pretend we are doing something useful here, too return 29 } 먼저 ..