VERITAS LUX MEA

more

[Kotlin] Continuation Interceptor

비동기 작업에서는 실행 위치나 스레드를 제어할 필요가 자주 생긴다. UI앱의 경우 UI업데이트는 메인 스레드에서만 가능하고, 서버 앱에서는 무거운 연산은 별도 스레드 풀로 분리하는 경우를 예로 들 수 있다. 이를 가능하게 해주는 도구가 바로 ContinuationInterceptor 이다. Coroutine 을 처음 배울때는 Interceptor 의 구현체인 Dispatcher 만 알게 되는데, Dispatcher 가 바로 Interceptor 의 구체클래스인 것을 알면 Continuation 을 "가로채서" 별개의 스레드에 실행하는 역할을 맡은 클래스인것이 좀더 와닿는다. 인터페이스 정의 interface ContinuationInterceptor : CoroutineContext.Element { ..

Android 2025.05.11 0

6. Kotlin Coroutines - Exceptions

https://medium.com/androiddevelopers/exceptions-in-coroutines-ce8da1ec060c 개발자들은 항상 happy path 만을 갈고 닦기를 좋아하지만, 항상 사용자들은 우리의 예상을 벗어난다. 만약 사용자들의 액션이 성공하지 않은 경우, 적절한 에러 메시지를 보여주는 것은 필수 불가결하다.  예외를 어떻게 적절하게 처리하느냐는 사용자가 애플리케이션을 바라보는 데 있어 아주 중요한 요소이다. 코루틴에서 어떤식으로 에러를 제대로 매니징 하는지 알아보자.  CoroutineScope 안에서 어떠한 코루틴이 실패로 끝나서 예외를 던진다면0) 자식 코루틴 실패 -> 1) 해당 스코프 안의 다른 자식 코루틴 취소 -> 2) 부모 코루틴 취소 -> 3) 위로 전달 과 ..

Android 2024.05.23 2

5. Kotlin Coroutine - Cancellation

https://medium.com/androiddevelopers/cancellation-in-coroutines-aa6b90163629 어떤 작업이 더이상 실행되지 않아도 될 때는, 메모리를 낭비하지 않기 위해 취소해주어야 한다.  코루틴은 CancellationException 이라는 예외를 던짊으로써 cancellation 을 처리한다. fun cancel(cause: CancellationException? = null)// 객체 안넘겨주면 기본값 사용함 public override fun cancel(cause: CancellationException?) {cancelInternal(cause ?: defaultCancellationException())}cancel 함수에 인자값으로 사실은 C..

Android 2024.05.22 0

4. Kotlin Coroutine - CoroutineScope/Context/Job

CoroutineScope : launch/async 와 같은 코루틴 빌더로 생성된 코루틴을 매니징 하는 친구. 진행중인 코루틴은 scope.cancel() 을 통해 취소할 수 있음. 사실상 코루틴을 생성하려면 항상 CoroutineScope 가 필요한데, 안드로이드의 라이프사이클 클래스들에서는 이미 유틸로 제공하는 scope 들이 있다. (viewModelScope, lifecycleScope)  CoroutineContext : CoroutineScope 를 생성할 때 인자로 넣어주는 애들을 코루틴 콘택스트라고 한다. 코루틴의 행위를 정의하는 것들을 퉁쳐서 콘택스트라고 한다. Job, CoroutineDispatcher, CoroutineName, CoroutineExceptionHandler 로 이..

Android 2024.05.21 0