모바일 개발 · 중급
Android에서 Hilt(또는 Dagger Hilt)를 사용하여 의존성 주입(DI)을 구현할 때, @Inject, @Module, @Provides 어노테이션의 역할과 사용 방법에 대해 설명하고, 빌드 타임에 어떻게 의존성 그래프가 생성되는지 간략하게 설명해 주세요.
힌트 · @Inject는 생성자/필드 주입, @Module과 @Provides는 외부 라이브러리나 인터페이스에 대한 의존성을 제공합니다. 컴파일 시 코드 생성 원리를 간략히 언급하세요.
@Inject@Module@Provides의존성 그래프컴파일 타임
모범답안
Hilt에서 의존성 주입을 할 때, @Inject, @Module, @Provides 어노테이션은 중요한 역할을 합니다.
@Inject는 Hilt에게 해당 클래스의 인스턴스를 주입해 달라고 요청하는 어노테이션입니다. 주로 생성자 주입이나 필드 주입에 사용됩니다. 예를 들어, 클래스 생성자에 @Inject를 붙이면 Hilt가 필요한 의존성을 자동으로 주입해줍니다.
@Module은 의존성을 제공하는 방법을 정의하는 클래스에 붙이는 어노테이션입니다. 주로 외부 라이브러리나 인터페이스처럼 직접 생성자를 수정할 수 없는 경우에 사용합니다.
@Provides는 @Module 안에서 특정 타입의 인스턴스를 어떻게 생성하고 제공할지 정의하는 메서드에 붙이는 어노테이션입니다.
Hilt는 컴파일 타임에 이러한 어노테이션들을 분석하여 의존성 그래프를 생성합니다. 이 그래프는 애플리케이션 내의 모든 의존 관계를 나타내며, Hilt는 이 그래프를 기반으로 필요한 의존성을 자동으로 주입해줍니다. 컴파일 시점에 코드를 생성하여 런타임 성능 저하를 최소화하는 것이 특징입니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Android / Kotlin 면접 질문
- Android 아키텍처 컴포넌트 중 ViewModel의 역할과 장점은 무엇이며, Activity 또는 Fragment의 생명주기와 어떻게 독립적으로 데이터를 유지할 수 있는지 설명해주세요.
- Kotlin Flow 기반의 StateFlow와 Android 아키텍처 컴포넌트의 LiveData는 각각 어떤 특징을 가지고 있으며, UI 상태 관리에 있어 어떤 상황에서 어떤 것을 사용하는 것이 더 효과적인지 비교하여 설명해주세요.
- 코틀린 코루틴에서 Dispatchers.Main, Dispatchers.IO, Dispatchers.Default의 역할과 각각 어떤 종류의 작업에 적합한지 구체적인 사용 사례와 함께 설명해주세요.
- Android Jetpack Navigation Component를 사용하여 앱 내 화면 간 이동을 구현할 때의 장점은 무엇이며, NavController, NavGraph, NavHostFragment가 각각 어떤 역할을 하는지 설명해주세요.
- Jetpack Compose에서 Recomposition의 동작 원리를 설명하고, 불필요한 Recomposition을 최소화하여 Compose UI 성능을 최적화하는 구체적인 전략들을 제시해 보세요.
- 대규모 안드로이드 프로젝트에서 멀티 모듈 아키텍처를 도입할 때의 장점과 단점을 설명하고, 모듈 간의 의존성 관리 및 순환 의존성 문제를 해결하는 방안에 대해 논의해 보세요.