본문 바로가기

분류 전체보기253

[Android] SupervisorJob, SupervisorScope에 대한 이해 코루틴의 예외 전파코루틴에서 예외가 발생하면, 그 코루틴은 취소되고 예외가 부모 코루틴으로 전파됩니다.만약 부모 코루틴에서도 예외가 처리되지 않으면, 예외는 루트 코루틴까지 예외가 전파될 수 있습니다.  하지만, 자식 코루틴 중 하나가 예외가 발생하더라도, 다른 코루틴의 실행에는 영향을 주지 않도록 처리해야 하는 경우가 있습니다. 예를들어, 여러개의 파일을 각 코루틴을 이용해 동시에 다운로드 할때, 특정 파일의 다운로드가 실패하더라도, 나머지 파일은 정상적으로 다운로드되어야 합니다. 이를 해결하기 위해 대표적으로 try-catch를 통해 예외를 개별적으로 처리할 수 있으나, 코루틴에서는 이를 더 간단하고 효율적으로 처리할 수 있는 SupervisorJob, SuperviosrSocpe를 제공합니다.이러한.. 2025. 2. 9.
[Android] Callback, Reactive 그리고 Coroutine 들어가기 전에개발자로서 우리는 우리를 더욱 생산성 있게 만들어주고 편안하게 해주는 새로운 기술들을 사용하는 것을 기꺼이 즐깁니다. 어떤 새로운 기술을 학습할 때 그 기술의 개념이 쉽게 와 닿지 않으면 먼저 기존에 알고 있는 유사한 기술이 없는지 떠올려보고, 있다면 새로운 기술과의 비교 / 대조를 통해 새로운 것의 개념을 구체화 하여 이해 하곤 합니다. 이러한 방식의 학습이 가능한 이유는 대부분의 새로운 기술이 “무” 에서 나오는 것이 아니고, 기존 기술의 약점을 보완하고 강점을 강화하는 방향으로 발전되어 나오기 때문입니다. 이번에 살펴 볼 코루틴도 그동안 우리가 비동기 처리를 위해 작성해 왔던 코딩 스타일을 보다 직관적이고 안전하게 작성할 수 있도록 돕기 위해 고안되었습니다. 이번 파트에서는 “사용자 설.. 2025. 2. 6.
[Android] 중단(suspend)함수를 비동기적으로 실행하는 방법도 있을까? 하나의 코루틴 내에서 중단 함수(suspend)를 호출하면 기본적으로 순차적으로 실행됩니다. 이는 일반적인 함수 호출과 유사하게, 앞선 함수가 완료된 후에 다음 코드가 실행되기 때문입니다. 개발을 하다 보면 네트워크를 통해 API를 호출할 때가 많습니다. 이때 상황에 따라 두 가지 방식으로 결과를 처리할 수 있습니다:동기적으로 결과를 받아 처리해야 하는 경우비동기적으로 여러 요청을 동시에 처리해야 하는 경우로그인 요청처럼 이전 결과가 다음 로직에 영향을 주는 경우 순차적인 실행이 필요하지만,2번과 같이 여러개의 API를 동시에 호출하여 전체 처리 시간을 줄이고 싶을 때는 비동기 실행이 더 효율적입니다. 이번 포스팅에서는 어떻게 하면 suspend함수를 비동기적으로 처리할 수 있을지에 대해 알아보도록 하겠.. 2025. 2. 5.
[Android] 중단(suspend)함수란 무엇이고 어떻게 동작할까? (feat. delay()) 중단(suspend)는 코루틴에서 어떻게 작동되는가?코루틴을 suspending 한다는 것은, 코루틴을 중간에 일시 정지하는 것을 의미합니다. 이것은 비디오 게임을 중간에 멈췄다가 다시 실행하는 것과 유사합니다. 코루틴을 일시 정지 하면 Continuation 객체에게 지금까지 실행한 정보(로컬 변수, 현재 까지 실행된 라인 등)들을 담고, 함수에서 빠져나옵니다. 그리고 다른 함수를 수행하다가 resumeWith() 을 호출 받고 다시 이전 함수를 처리하는 식으로, 일시정지를 구현합니다.  재개(Resume)코루틴 내부에서 일시 중지를 하고 싶다면, suspend 함수를 호출해야 일시 중지가 됩니다.하나의 예를 통해 알아보도록 하겠습니다.suspend fun main() { println("befo.. 2025. 2. 5.
[Android] runBlocking을 왜 주의해서 써야할까? (feat. Deadlock) 시작하기전에 Kotlin은 Android 개발에서 널리 사용되며, 비동기 및 논블로킹 프로그래밍을 지원하는 코루틴 기능을 제공합니다. 코루틴은 launch, async, runBlocking 같은 빌더로 시작할 수 있습니다. 이 중 runBlocking은 실행되는 스레드를 차단하기 때문에 Android의 메인 스레드에서 사용하면 UI 멈춤이나 ANR(Application Not Responding) 오류를 유발할 수 있습니다. 이 글에서는 runBlocking의 내부 메커니즘과 Android 개발 시 주의해야 할 사례들을 살펴보겠습니다.   runBlocking을 살펴보자runBlocking으로 작성하고, 10초의 delay를 걸어주었습니다. 이 코드는 Android UI에서 호출된 코드입니다.clas.. 2025. 2. 3.
[Android] Coroutine 왜 스레드보다 가볍다고 할까? 코루틴은 왜 스레드 보다 가볍다고 할까?코루틴 하나가 새로 생성되어 실행된다는 것이 그와 동시에 새로운 스레드 또한 생성되는 것을 의미하는 것은 아닙니다. (정확히 말하자면 이것은 코루틴 생성 시 스케쥴러 설정에 따라 다릅니다.) 사실, 코루틴은 스케쥴링 가능한 코드 블록 혹은 이러한 코드 블록들의 집합이라고 볼 수 있습니다. 이해를 돕기 위해서 코루틴이 실행되는 과정을 다음과 같이 그림으로 나타내 보았습니다. 제일 왼쪽에 보면 CoroutineScope 가있습니다. 우리가 어떤 코루틴을 실행하기 위해서는 어떤 코루틴 스코프에 속해 있어야 합니다.현재 코루틴 스코프가 갖는 컨텍스트(CoroutineContext) 에서 Dispatcher 는 UI Dispatcher 라고 되어 있습니다. 이것은 현재 스코.. 2025. 1. 31.