모바일 개발 · 심화
Dagger 또는 Hilt에서 컴포넌트(Component)의 계층 구조가 필요한 이유와 이를 어떻게 설계하고 사용하는지 설명하고, 특정 스코프(예: @Singleton, @ActivityScoped)가 컴포넌트 계층 구조와 어떤 관계를 가지는지 설명해 보세요.
힌트 · 리소스 공유 및 생명주기 관리를 위한 계층 구조의 필요성을 설명하고, 각 스코프가 바인딩되는 컴포넌트의 생명주기와 일치함을 언급합니다.
의존성 격리스코프 관리컴포넌트 재사용서브컴포넌트의존성 그래프
모범답안
Dagger나 Hilt에서 컴포넌트 계층 구조가 필요한 이유는 크게 두 가지입니다. 첫째, 의존성 격리를 통해 특정 컴포넌트에서만 필요한 의존성을 분리하여 관리하고, 둘째, 메모리 누수를 방지하고 생명주기를 효과적으로 관리하기 위해서입니다.
예를 들어, Activity 컴포넌트는 Application 컴포넌트의 서브컴포넌트가 될 수 있습니다. 이렇게 하면 Activity에 필요한 의존성은 Activity 컴포넌트 내에서만 생성되고 관리되며, Activity가 종료될 때 함께 소멸됩니다.
스코프는 컴포넌트의 생명주기와 밀접하게 관련됩니다. @Singleton 스코프는 Application 컴포넌트와 같이 애플리케이션 생명주기 동안 유지되는 의존성에 사용되고, @ActivityScoped는 Activity 컴포넌트와 같이 Activity 생명주기 동안 유지되는 의존성에 사용됩니다. 스코프를 통해 의존성이 필요한 시점에 생성되고 불필요해지면 소멸되도록 관리할 수 있습니다. 컴포넌트 계층 구조와 스코프를 적절히 사용하면 의존성 관리를 효율적으로 할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Android / Kotlin 면접 질문
- 대규모 안드로이드 프로젝트에서 멀티 모듈 아키텍처를 도입할 때의 장점과 단점을 설명하고, 모듈 간의 의존성 관리 및 순환 의존성 문제를 해결하는 방안에 대해 논의해 보세요.
- Android 8.0 (Oreo) 이후 강화된 백그라운드 실행 제한 사항들을 설명하고, 이러한 제약 하에서 안정적이고 효율적인 백그라운드 작업을 구현하기 위한 Jetpack WorkManager 활용 전략을 제시해 보세요.
- 코루틴의 Dispatchers 종류와 각 Dispatcher의 역할에 대해 설명하고, CoroutineScope를 올바르게 사용하여 메모리 누수를 방지하고 코루틴 생명주기를 관리하는 방법에 대해 구체적인 예시와 함께 설명해 주세요.
- 안드로이드 앱의 콜드 스타트(Cold Start) 프로세스를 설명하고, 콜드 스타임(Cold Start Time)을 효과적으로 줄이기 위한 구체적인 최적화 방안들을 제시해 보세요.
- 복잡한 Custom View를 설계할 때, onMeasure, onLayout, onDraw 메서드 내에서 발생할 수 있는 성능 병목 현상과 이를 해결하기 위한 전략들을 설명하고, 복잡한 레이아웃을 효율적으로 처리하기 위한 접근 방식을 제시해 보세요.