android

Android Dagger & Hilt

Seon Dev Notes 2025. 2. 17. 16:08

오늘은 저번에 DI 라이브러리에서 조금 살펴보았던 Dagger와 Hilt에 대해 설명 해 보겠다.

Dagger & Hilt

  • Dagger는 강력한 의존성 주입(DI) 라이브러리로, 컴파일 타임에 의존성을 해결하여 성능이 뛰어나다.
  • Hilt는 Dagger를 기반으로 한 안드로이드 전용 DI 프레임워크로, 설정을 간소화하고 안드로이드 컴포넌트와 쉽게 통합할 수 있도록 도와준다.

주요 어노테이션

  1. Dagger 주요 어노테이션
  • @Component: 의존성 그래프를 정의하는 인터페이스
  • @Module: 의존성을 제공하는 메서드를 정의하는 클래스
  • @Provides: @Module 내부에서 의존성을 제공하는 메서드에 사용
  • @Inject: 의존성 주입 대상 클래스의 생성자나 필드에 사용
  1. Hilt 주요 어노테이션
  • @HiltAndroidApp: Hilt를 사용하기 위한 Application 클래스에 적용
  • @AndroidEntryPoint: 의존성을 주입받을 안드로이드 컴포넌트(Activity, Fragment 등)에 사용
  • @Inject: Hilt가 의존성을 주입할 수 있도록 대상 클래스의 생성자나 필드에 사용
  • @Module: Hilt에서 의존성을 제공하기 위한 모듈 정의
  • @InstallIn: Hilt 모듈이 적용될 컴포넌트의 범위를 지정 (ex: SingletonComponent)
  • @Provides: 의존성을 제공하는 메서드에 사용
  • @Binds: 구현체를 인터페이스에 매핑할 때 사용

Hilt의 주요 특징

  • Dagger보다 간편한 설정
  • 안드로이드 컴포넌트와 자동 통합
  • 컴파일 타임 의존성 확인으로 성능 최적화
  • 리플렉션 미사용 → 빠른 실행 속도

Hilt의 사용법

1. 의존성 추가

    plugins {
    id("kotlin-kapt")
    id("com.google.dagger.hilt.android")
    }
    android {  
    ...  
    }
    
    dependencies {  
    implementation("com.google.dagger:hilt-android:2.51.1")  
    kapt("com.google.dagger:hilt-android-compiler:2.51.1")  
    }
    
    // Allow references to generated code  
    kapt {  
    correctErrorTypes = true  
    }

2. Hilt 애플리케이션 클래스

Hilt를 사용하는 모든 앱은 @HiltAndroidApp으로 주석이 지정된 Application 클래스를 포함해야 한다.

@HiltAndroidApp
class ExampleApplication : Application() { ... }

 

3. 의존성 주입 예제

class Engine @Inject constructor() {
    fun start() = "Engine Started"
}

@Module
@InstallIn(SingletonComponent::class)
object CarModule {
    @Provides
    fun provideCar(engine: Engine): Car {
        return Car(engine)
    }
}

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    @Inject lateinit var car: Car
}

 

'android' 카테고리의 다른 글

Android State Hoisting(상태 호이스팅)  (0) 2025.03.10
Android XML과 Compose의 차이점?  (0) 2025.02.23
Android DI  (0) 2025.02.09
Android Coroutine(코루틴)  (0) 2025.02.03
Android Kotlin  (0) 2025.02.01