위와 같이 스레드 하나만을 사용해서 실행되는 애플리케이션을 단일 스레드 애플리케이션이라고 한다. 안드로이드에서는 기본적으로 메인 스레드가 존재하며, 메인 스레드 하나만으로도 간단한 안드로이드 앱을 만들 수 있다. 단일 스레드의 한계 하지만 안드로이드 앱의 기능이
단일 스레드 애플리케이션이 아닌 멀티 스레드 프로그래밍을 통해 병렬 처리를 하여 앱의 성능을 크게 끌어올릴 수 있지만, 멀티 스레드 프로그래밍에도 한계가 존재한다. 멀티 스레드 프로그래밍의 한계 스레드는 하나의 작업을 수행할 때 해당 스레드에서 다른 작업을 동시에
코루틴 디스패처란? Dispatcher라는 단어를 보면 코루틴 디스패처가 무슨 일을 하는지 대략 알 수 있다. Dispatch는 보내다, 전송하다 라는 뜻을 가지고 있다. 단어의 의미를 곱씹어서 알아보면 CoroutineDispatcher는 코루틴을 스레드로 보내서 실
coroutine builder라는 말이 공식문서에서 위와 같이 사용되고는 있지만, 코루틴 빌더에 대해 별도의 상세 설명은 공식문서에 따로 존재하지 않는다. 개발자들이 공식문서에서 coroutine builder라는 용어가 사용된 부분들을 살펴보고 코루틴 빌더라는
withContext() 위의 예시코드에서 출력 결과를 보면 runBlocking()을 통해 생성된 코루틴과 launch()에 의해 생성된 코루틴이 각각 coroutine#1, coroutine#2로 다른 것을 알 수 있다. 참고로 coroutine#1 이렇게 코루틴
CoroutineContext란? CoroutineContext란 코루틴을 실행하는 실행 환경을 설정하고 관리하는 interface이다. 쉽게 말해서 CoroutineContext 객체는 코루틴의 실행 환경 정보를 담은 객체라고 할 수 있다. CoroutineCont
코루틴의 부모-자식 관계 코루틴에서는 비동기 작업인 코루틴을 부모-자식 관계로 구조화함으로써 코루틴이 보다 안전하게 관리되고 제어될 수 있도록 한다. 부모-자식 관계로 구조화하는 방법은 간단하다. 부모 코루틴 블록 내에서 새로운 코루틴 빌더 함수를 호출하여 코루틴을 생
상속되지 않는 Job 두 개의 코루틴이 부모-자식 관계일 때 부모의 CoroutineContext 자식에게 상속된다. 그래서 부모의 CoroutineName, CoroutineDispatcher, CoroutineExceptionHandler는 자식에게 상속된다. 하지
코루틴의 취소 코루틴 실행 도중 코루틴을 더이상 실행할 필요가 없어지면 즉시 취소해야 한다. 코루틴이 실행될 필요가 없어졌는데도 취소하지 않드나면 코루틴은 계속해서 스레드를 사용하며 이는 애플리케이션의 성능 저하로 이어진다. 예를 들어, 시간이 오래 걸리는 파일 변환
코루틴의 상태 코루틴은 그림과 같이 생성, 실행 중, 실행 완료 중, 실행 완료, 취소 중, 취소 완료 상태를 가질 수 있다. 생성(New) : 코루틴 빌더 함수를 통해 코루틴을 생성하면 코루틴은 기본적으로 생성 상태에 놓이며 자동으로 실행 중 상태로 넘어간다. l
CorotuineScope 객체는 자신의 범위 내에서 생성된 코루틴들에게 실행 환경을 제공하고, 이들의 실행 범위를 관리하는 역할을 한다. CoroutineScope 인터페이스는 코루틴의 실행 환경인 CoroutineContext를 가진 단순한 인터페이스이다. Co
예외 전파 코루틴 실행 도중 예외가 발생하면 해당 코루틴은 취소되고 부모 코루틴으로 예외가 전파된다. 만약 부모 코루틴에서 예외 전파가 제한되지 않으면 계속 상위 코루틴으로 전파되는데 이것이 반복되면 루트 코루틴까지 예외가 전파될 수 있다. 이처럼 코루틴의 예외는 부모
CoroutineExceptionHandler 사용 구조화된 코루틴들에 공통적인 예외 처리기를 설정해야 하는 경우도 존재한다. 코루틴은 이를 위해 CoroutineContext 구성 요소로 CoroutineExceptionHandler라고 하는 예외 처리기를 지원한다.
1. try catch문을 사용한 코루틴 예외 처리 코루틴에서 예외가 발생했을 때 코틀린에서 일반적으로 예외를 처리하는 방식과 같이 try catch문을 통해 예외를 처리할 수 있다. 이 코드에서는 Coroutine1에서 예외가 발생하지만 예외가 try catch문을