모바일 개발 · 심화
코루틴의 Dispatchers 종류와 각 Dispatcher의 역할에 대해 설명하고, CoroutineScope를 올바르게 사용하여 메모리 누수를 방지하고 코루틴 생명주기를 관리하는 방법에 대해 구체적인 예시와 함께 설명해 주세요.
힌트 · `Main`, `IO`, `Default` Dispatcher의 용도를 설명하고, `viewModelScope`, `lifecycleScope` 등의 사용과 커스텀 스코프 생성 시 주의점을 언급합니다.
DispatchersCoroutineScopeJoblifecycle메모리 누수
모범답안
코루틴 Dispatchers는 코루틴이 실행될 스레드를 결정합니다. Dispatchers.Main은 UI 스레드에서 동작하며 UI 업데이트에 사용됩니다. Dispatchers.IO는 네트워크나 디스크 I/O에 최적화된 스레드 풀을 사용하고, Dispatchers.Default는 CPU 집약적인 작업에 적합합니다.
CoroutineScope는 코루틴의 생명주기를 관리합니다. viewModelScope나 lifecycleScope를 사용하면 액티비티나 뷰모델의 생명주기에 맞춰 코루틴이 자동으로 취소되어 메모리 누수를 방지할 수 있습니다.
예를 들어, 뷰모델에서 데이터를 가져오는 코루틴을 실행할 때 viewModelScope.launch { fetchData() }처럼 사용하면 뷰모델이 소멸될 때 코루틴도 함께 취소됩니다. 커스텀 스코프를 만들 때는 Job을 사용하여 코루틴의 생명주기를 명확하게 관리하고, 더 이상 필요하지 않을 때 cancel() 메서드를 호출해야 합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Android / Kotlin 면접 질문
- Jetpack Compose에서 Recomposition의 동작 원리를 설명하고, 불필요한 Recomposition을 최소화하여 Compose UI 성능을 최적화하는 구체적인 전략들을 제시해 보세요.
- 대규모 안드로이드 프로젝트에서 멀티 모듈 아키텍처를 도입할 때의 장점과 단점을 설명하고, 모듈 간의 의존성 관리 및 순환 의존성 문제를 해결하는 방안에 대해 논의해 보세요.
- Android 8.0 (Oreo) 이후 강화된 백그라운드 실행 제한 사항들을 설명하고, 이러한 제약 하에서 안정적이고 효율적인 백그라운드 작업을 구현하기 위한 Jetpack WorkManager 활용 전략을 제시해 보세요.
- Dagger 또는 Hilt에서 컴포넌트(Component)의 계층 구조가 필요한 이유와 이를 어떻게 설계하고 사용하는지 설명하고, 특정 스코프(예: @Singleton, @ActivityScoped)가 컴포넌트 계층 구조와 어떤 관계를 가지는지 설명해 보세요.
- 안드로이드 앱의 콜드 스타트(Cold Start) 프로세스를 설명하고, 콜드 스타임(Cold Start Time)을 효과적으로 줄이기 위한 구체적인 최적화 방안들을 제시해 보세요.
- 복잡한 Custom View를 설계할 때, onMeasure, onLayout, onDraw 메서드 내에서 발생할 수 있는 성능 병목 현상과 이를 해결하기 위한 전략들을 설명하고, 복잡한 레이아웃을 효율적으로 처리하기 위한 접근 방식을 제시해 보세요.