본문 바로가기

전체 글256

[Hilt] Hilt의 Componet와 Scope Component Component는 의존성 객체를 생성하고, 의존성 주입을 관리하는 컨테이너입니다. 즉, 생명주기(Scope)에 맞춰 의존성을 관리하고 제공 하는 역할을 합니다.컴포넌트는 보통 @SingletonComponent, @ActivityComponent, **@FragmentComponent**와 같이 특정 라이프사이클에 맞는 범위에 따라 정의되며,Hilt Component는 표준 Android 구성요소, Activity, Fragment, View, ViewModel, Service에서 사용할 수 있는 Component를 제공하고 있습니다.자동으로 생명주기 및 계층구조와 같은 세부적인 설정을 자동으로 구현합니다.  컴포넌트는 다음과 같은 계층 구조를 가집니다. 이러한 계층구조에서 화살표는 .. 2024. 11. 11.
[Android] 코루틴(Coroutine) 예외 처리 방법 Coroutine은 예외를 전파할 때, 자식 코루틴에서 예외가 발생하면 부모에게 전파하고, 부모는 그 에러를 다시 자식한테 전파한다.이 개념을, 그림으로 먼저 알아보자. 에러 전파 방식CoroutineBuilder가 자식이 아닌 Root Coroutine으로 생성되어 예외가 발생한다면 아래와 같은 차이를 가진다.전파 (Propagate)전파 방식은, 코루틴 빌더가 생성되면서 내부 로직에서 Exception이 발생하면, 즉시 상위로 에러를 전파한다.launchactor노출 (Expose)반면에 노출 방식은, await() 메소드가 실행되면 그 때 에러가 전파된다.asyncproducefun main() { val deferred = GlobalScope.async { throw Excep.. 2024. 11. 9.
[Android] 코루틴(Coroutine)의 구조적 동시성(Structured Concurrency) 구조적 동시성 (Structured Concurrency) 이란?부모 코루틴은 자신의 스코프를 자식에게 전달하고, 자식 코루틴은 해당 스코프에서 호출을 받는다.이러한 부모-자식 간의 관계를 생성하는 것을 structured concurrency라고 한다.부모-자식간의 관계에 대한 상호작용은 다음과 같다.자식 코루틴은 부모 코루틴으로부터 컨텍스트를 상속받는다. (하지만 해당 컨텍스트를 덮어쓰는 것도 가능하다.)부모 코루틴은 자식 코루틴이 모두 완료될 때까지 일시중단된다. (기다린다)부모 코루틴이 cancel되었을 때, 자식 코루틴들도 모두 cancel 된다.자식 코루틴에서 예외가 발생하여 부모 코루틴으로 전파되었을 때, 부모 코루틴 또한 종료된다.단, 다른 coroutine builder들과 다르게 run.. 2024. 11. 9.
[Android] 코루틴(Coroutine) Builder에 대한 고찰 - Deep Dive CoroutineBuilderCoroutineBuilder는 CoroutineScope의 확장함수로, 다양한 요구사항에 맞게 개별적인 Coroutine(코루틴)을 만드는 방법입니다.Coroutine Builder에는 여러 종류가 존재합니다. ( launch / async / withContext / runBlocking )  자세히 살펴보기 전에 각 Builder에 대해 간단히 알아보겠습니다. 1. launch() -> Job 반환결과가 없는 코루틴을 생성하는 빌더입니다. 여기서 결과는 반환인스턴스가 아닌 결과값(Value)을 뜻하며, 반환하는 Job인스턴스는 생성된 해당 코루틴을 제어하는데 사용됩니다.2. async() -> Deferred 반환launch와 다르게 결과를 가지는 코루틴을 생성하는 빌더.. 2024. 11. 9.
[Android] 코루틴(Coroutine) Scope에 대한 고찰 - Deep Dive Scope코루틴의 Scope는 코루틴의 수명을 관리하는 역할을 합니다.코루틴은 스코프 내에서만 실행되며, 스코프가 종료되면 그 스코프 내에서 실행된 모든 코루틴도 자동으로 취소됩니다.이는 구조화된 동시성을 구현하는 중요한 개념으로, 비동기 작업이 여러 개 실행되더라도 일정한 흐름 안에서 안전하게 관리될 수 있도록 해줍니다.코루틴은 여러 개의 스코프에서 동작할 수 있으며, 아래와 같이 분류할 수 있습니다. CoroutineScope코루틴이 실행되는 범위로, 코루틴을 실행하고 싶은 Lifecycle에 따라 원하는 Scope를 생성하여 코루틴이 실행될 작업 범위를 지정할 수 있습니다.사용자 지정 CoroutineScope: CoroutineScope(CorountineContext)ex) CoroutineSc.. 2024. 11. 9.
[Android] 코루틴(Coroutine)의 Context란 ? 코루틴 컨텍스트(Coroutine Context)란?CoroutineContext는 코루틴을 실행하는 실행 환경을 설정하고 관리하는 인터페이스로,CoroutineContext 객체는 CoroutineDispatcher, CoroutineName, Job 등의 객체를 조합하여 코루틴의 실행 환경을 설정합니다.따라서, CoroutineContext 객체는 코루틴 실행 및 관리의 핵심 역할을 합니다.CoroutineContext는 launch나 async 코루틴 빌더의 파라미터로 설정할 수 있으며, 해당 파라미터에 CoroutineContext를 명시적으로 지정하면 특정 스레드풀로 수행 제한, 코루틴 이름 설정 등을 할 수 있습니다. CoroutineContext 구성 요소CoroutineDispatcher코.. 2024. 11. 9.