모바일 개발 · 심화
대규모 안드로이드 프로젝트에서 멀티 모듈 아키텍처를 도입할 때의 장점과 단점을 설명하고, 모듈 간의 의존성 관리 및 순환 의존성 문제를 해결하는 방안에 대해 논의해 보세요.
힌트 · 빌드 속도 향상, 책임 분리, 코드 재사용성 등의 장점과 복잡성 증가, 설정 오버헤드 등의 단점을 설명합니다. DI와 인터페이스 기반의 분리를 통해 순환 의존성을 방지할 수 있습니다.
모듈화빌드 시간의존성 주입인터페이스순환 참조
모범답안
대규모 안드로이드 프로젝트에서 멀티 모듈 아키텍처를 도입하면 여러 장점이 있습니다. 빌드 속도가 빨라지고, 각 모듈별로 책임이 분리되어 유지보수가 용이해집니다. 또한, 공통 기능을 모듈로 분리하여 코드 재사용성을 높일 수 있습니다.
하지만 단점도 존재합니다. 프로젝트 구조가 복잡해지고, 모듈 간의 설정 오버헤드가 증가할 수 있습니다.
모듈 간 의존성 관리는 Gradle을 통해 이루어지며, API와 Implementation을 적절히 사용하여 의존성을 제어합니다. 순환 의존성 문제는 주로 인터페이스 기반으로 모듈을 분리하고, DI(Dependency Injection) 라이브러리를 활용하여 해결합니다. 예를 들어, A 모듈이 B 모듈에 의존하고, B 모듈이 A 모듈에 의존하는 경우, A 모듈은 B 모듈의 인터페이스에만 의존하도록 설계하여 순환 참조를 방지할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Android / Kotlin 면접 질문
- Android에서 Hilt(또는 Dagger Hilt)를 사용하여 의존성 주입(DI)을 구현할 때, @Inject, @Module, @Provides 어노테이션의 역할과 사용 방법에 대해 설명하고, 빌드 타임에 어떻게 의존성 그래프가 생성되는지 간략하게 설명해 주세요.
- Android Jetpack Navigation Component를 사용하여 앱 내 화면 간 이동을 구현할 때의 장점은 무엇이며, NavController, NavGraph, NavHostFragment가 각각 어떤 역할을 하는지 설명해주세요.
- Jetpack Compose에서 Recomposition의 동작 원리를 설명하고, 불필요한 Recomposition을 최소화하여 Compose UI 성능을 최적화하는 구체적인 전략들을 제시해 보세요.
- Android 8.0 (Oreo) 이후 강화된 백그라운드 실행 제한 사항들을 설명하고, 이러한 제약 하에서 안정적이고 효율적인 백그라운드 작업을 구현하기 위한 Jetpack WorkManager 활용 전략을 제시해 보세요.
- 코루틴의 Dispatchers 종류와 각 Dispatcher의 역할에 대해 설명하고, CoroutineScope를 올바르게 사용하여 메모리 누수를 방지하고 코루틴 생명주기를 관리하는 방법에 대해 구체적인 예시와 함께 설명해 주세요.
- Dagger 또는 Hilt에서 컴포넌트(Component)의 계층 구조가 필요한 이유와 이를 어떻게 설계하고 사용하는지 설명하고, 특정 스코프(예: @Singleton, @ActivityScoped)가 컴포넌트 계층 구조와 어떤 관계를 가지는지 설명해 보세요.