프로그래밍

[Android/Kotlin] Hilt를 활용한 효율적인 의존성 주입 관리

Woulk 2024. 7. 8. 08:28
반응형

안드로이드 개발에서 의존성 주입(Dependency Injection)은 코드의 모듈화, 테스트 용이성, 유지보수성을 크게 향상시켜줍니다.

Hilt는 구글이 제공하는 의존성 주입 라이브러리로, Dagger2를 기반으로 하여 안드로이드 환경에 최적화된 형태로 제공됩니다.

 

Hilt의 장점

  1. 간편한 사용: 간단한 어노테이션을 통해 의존성 주입을 설정할 수 있어, 설정이 쉽고 빠릅니다.
  2. 안드로이드 통합: ViewModel, WorkManager, Navigation 등 안드로이드의 주요 컴포넌트와 원활하게 통합됩니다.
  3. 모듈화: 프로젝트를 모듈화하여 관리하기 쉽게 만들어주며, 테스트하기도 용이합니다.
  4. 성능 최적화: 컴파일 타임에 의존성을 해결하여 런타임 성능이 뛰어납니다.

Hilt의 단점

  1. 학습 곡선: 기존 Dagger2 사용자에게는 비교적 쉽게 적응할 수 있지만, DI를 처음 접하는 개발자에게는 학습 곡선이 있을 수 있습니다.
  2. 코드 복잡성 증가: 프로젝트 규모가 커질수록 Hilt 구성 요소가 많아져 코드 복잡성이 증가할 수 있습니다.
  3. 빌드 속도: Hilt 설정으로 인해 빌드 시간이 길어질 수 있습니다.

Hilt 예제

간단한 Hilt 예제를 통해 기본 사용법을 알아보겠습니다.

 

1. 프로젝트 설정

먼저, build.gradle 파일에서 Hilt를 설정합니다.

// build.gradle (Project)
buildscript {
    ext.hilt_version = '2.28-alpha'
    dependencies {
        classpath 'com.google.dagger:hilt-android-gradle-plugin:$hilt_version'
    }
}

// build.gradle (Module)
plugins {
    id 'kotlin-kapt'
    id 'dagger.hilt.android.plugin'
}

dependencies {
    implementation "com.google.dagger:hilt-android:$hilt_version"
    kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
}

2. Application 클래스 설정

Hilt를 사용하기 위해 Application 클래스를 설정합니다.

@HiltAndroidApp
class MyApplication : Application()

3. Activity에서 Hilt 사용

Activity나 Fragment에서 의존성을 주입하려면 @AndroidEntryPoint 어노테이션을 사용합니다.

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

    @Inject
    lateinit var repository: MyRepository

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        // repository 사용
    }
}

 

4. Hilt 모듈 정의

의존성을 제공하는 모듈을 정의합니다. 모듈은 @Module 어노테이션과 @InstallIn 어노테이션을 사용하여 설정합니다.

@Module
@InstallIn(SingletonComponent::class)
object AppModule {

    @Provides
    @Singleton
    fun provideMyRepository(): MyRepository {
        return MyRepositoryImpl()
    }
}

5. Repository 인터페이스와 구현

interface MyRepository {
    fun getData(): String
}

class MyRepositoryImpl : MyRepository {
    override fun getData(): String {
        return "Hello, Hilt!"
    }
}

 

마무리

Hilt는 안드로이드 애플리케이션에서 의존성 주입을 쉽게 구현할 수 있게 도와주는 강력한 도구입니다.

이를 통해 코드의 유지보수성, 모듈화, 테스트 용이성을 크게 향상시킬 수 있습니다.

그러나 학습 곡선과 코드 복잡성 증가와 같은 단점도 고려해야 합니다.

Hilt를 잘 활용하면 보다 견고하고 관리하기 쉬운 안드로이드 애플리케이션을 개발할 수 있습니다.

 

참고 링크:

반응형