
코루틴은 잡히지 않은 예외가 발생했을 때 종료된다스레드도 동일한 경우에 종료되지만, 차이점이 있다.코루틴 빌더는 부모도 종료시키고, 종료된 부모는 자식들까지 모두 취소시킨다는 것이다. fun main(): Unit = runBlocking { launch { launch { delay(1000) throw Error("Some error") } launch { delay(2000) println("Will not be printed") } launch { delay(500) println("W..
코루틴에서 아주 중요한 기능 중 하나는 바로 취소다.작업을 취소하기 위해 단순히 스레드를 죽이는 것은 최악의 방법이다. 연결을 닫고 자원을 해제할 방법이 없기 때문이다.개발자들이 상태가 Active한지 계속해서 확인하는 방법도 불편하다.코루틴의 취소 방식은 아주 간단하고 편리하며, 안전하다. 기본적인 취소Job 인터페이스는 잡을 취소하는 cancel() 함수를 가지고 있다. cancel() 함수를 호출하면 다음과 같은 효과가 일어난다.cancel()을 호출한 코루틴은 첫 번째 중단점에서 잡을 끝낸다.잡의 자식들도 취소된다. 하지만 잡의 부모는 영향을 받지 않는다.취소된 잡은 새로운 코루틴의 부모로 사용될 수 없다. 취소된 잡은 Cancelling 상태가 되었다가 Cancelled 상태가 된다. canc..

지난 포스팅에서 구조화된 동시성의 특성에 대해 배웠다.자식 코루틴은 부모 코루틴으로부터 컨텍스트를 상속받는다.부모 코루틴은 모든 자식 코루틴이 작업을 마칠 때까지 기다린다.부모 코루틴이 취소되면 자식 코루틴도 취소된다.자식 코루틴에서 에러가 발생하면, 부모 코루틴도 에러로 소멸된다.구조화된 동시성의 특성은 Job 컨텍스트와 관련이 있다.Job은 코루틴을 취소하고, 상태를 파악하는 등 다양하게 사용될 수 있다. Job이란 무엇인가?잡은 수명을 가지고 있고 취소 가능하다.Job은 인터페이스지만 구체적인 사용법과 상태를 가지고 있기 때문에 추상 클래스처럼 다룰 수도 있다. 잡의 수명은 상태로 나타낸다. 위 그림은 잡의 상태와 상태 변화를 나타낸 도식도이다.ActiveActive 상태에서는 잡이 실행되고 코루..
fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = Coroutinestart.DEFAULT, block: suspend CoroutineScope.() -> Unit): Job { ...}코루틴 빌더 함수의 시그니처 첫 번째 파라미터가 CoroutineContext라는 사실을 알 수 있다.빌더 함수의 리시버뿐만 아니라 마지막 인자의 리시버도 CoroutineScope 타입이다. interface CoroutineScope { val coroutineContext: CoroutineContext}CoroutineScope는 CoroutineConte..

중단 함수는 Continuation 객체를 다른 중단 함수로 전달한다.따라서 중단 함수는 일반 함수를 호출할 수 있지만, 일반 함수는 중단 함수를 호출할 수 없다.모든 중단 함수는 다른 중단 함수에 의해 호출되어야 한다. 이때 중단 함수를 시작하는 지점이 코루틴 빌더다.코루틴 빌더는 일반 함수와 중단 함수를 연결시키는 다리가 된다.kotlinx.coroutines 라이브러리가 제공하는 필수적인 코루틴 빌더 세 가지를 탐색해 보자.launchrunBlockingasync launch 빌더thread 함수를 호출하여 새로운 스레드를 시작하는 것과 비슷하다.코루틴을 시작하면 별개의 작업으로 실행된다.fun main() { GlobalScope.launch { delay(1000L) ..
코틀린 언어에서 자체적으로 지원하는 부분(컴파일러의 지원과 코틀린 기본 라이브러리의 요소)코틀린 코루틴 라이브러리(kotlinx.coroutines)코루틴은 두 가지로 구성되어 있다. 코틀린 언어 차원에서는 자유도를 보장하기 위해 코루틴을 최소한으로 지원하고 있다.다른 프로그래밍 언어에서 동시성을 구현한 스타일을 이식 하기 위해 사용할 수 있지만, 직접 다루기 쉽지는 않다.그 예로 suspendCoroutine()이나 Continuation 등이 있다.애플리케이션 개발자들보다는 라이브러리 개발자들에게 적합하다. 언어 차원에서 지원하는 것과 별개로 kotlinx.coroutines 라이브러리가 있다.이 라이브러리를 사용하려면 프로젝트에 별도로 의존성을 추가해야 한다.라이브러리는 코틀린 언어 차원에서 코루..

Continuation 전달 방식Continuation은 함수에서 함수로 인자를 통해 전달된다. Continuation은 마지막 파라미터로 전달된다.suspend fun getUser(): User?suspend fun setUser(user: User)suspend fun checkAvailability(flight: Flight): Boolean위 중단 함수의 실제 함수 시그니처는 아래와 같다.fun getUser(continuation: Continuation): Any?fun setUser(user: User, continuation: Continuation): Anyfun checkAvailability( flight: Flight, continuation: Continuation,)..

2024년 마지막날에 쓰려고 했던 회고글을 이제서야 올린다.과제 전형이 겹쳐 미루다가 드디어 작성한다. 나의 2024년 == 우아한테크코스2024년을 한 단어로 정의하자면 무조건 "우아한테크코스"일 것이다.개발뿐만 아니라 모든 내 경험과 성장은 우테코로부터 기반했다.우테코 합격 후 했던 고민들이 무색하게, 2024년 겪었던 모든 경험들이 나를 성장시키는 연료가 되었다. 흐르는 대로 살아보기갓 25살이 된 나는 가장 불안한 시기를 지났다.자신감도 없고 자존감도 낮았다. 쉽게 불안해했다. 와중에 완벽주의적 성향도 강했다.이런 상태로 우테코에 들어갔을 땐, 마음에 소용돌이가 치는 것 같았다.경쟁이 없는 환경에서도 나는 1등을 하고 싶었다. 하지만 이렇게 스스로를 몰아붙이며 10개월을 버티는 건 말도 안..