업데이트:

카테고리:

/

태그: ,

Hilt

의존성 주입 모듈로 Activity, viewModel, repository 등.. 각 클래스가 의존관계를 최대한 느슨하게 하고 런타임시 관계를 동적으로 주입해주는 모듈이다.

의존성을 분리하는 이유는

  1. 테스트 하기가 편하다.

    클라이언트와 서비스가 분리되어, 서비스의 함수만 따로 모의객체를 사용하여 테스트할 수 있다.

  2. 독립되어 있기에 결합도가 낮고, 유지보수에 용이하다.
  3. 중복된 코드가 줄어든다.
  4. 코드의 재사용성이 증가된다.

사용법

  1. 의존성 추가

     // 프로젝트 gradle
     buildScript {
     	dependencies {
     		classpath 'com.google.dagger:hilt-android-gradle-plugin:version'
     	}
     }
    

     plugins {
     	id 'kotlin-ksp'
     	id 'dagger.hilt.android.plugin'
     }
        
     android {
     	ComplieOptions {
     		sourceCompatibitiy java_version_1_8
     		targetCompatibitiy java_version_1_8
     	}
     }
        
     dependencies {
     	implementation 'com.google.dagger.hilt-android:version'
     	ksp 'com.google.dagger:hilt-complier:version'
     }
    
  2. Application 클래스에 @HiltAndroidApp 을 통해서 의존성을 주입
  3. Android 클래스의 종속성 주입

    @AndroidEntryPoint - Activity, Fragment

    @HiltViewModel - ViewModel

    @Inject - 외부 모듈이 필요한 경우는 이 어노테이션을 통해서 가져온다.

  4. 의존성 주입 모듈 작성

     @Module
     @InstallIn(SingletonComponent)
     object Module {
        	
     	@Provide
     	@Singleton
     	fun provideRepository(): Repository {
     		return Repository()
     	}
     }
    
  5. 사용

     @HiltViewModel
     class viewModel @Inject (
     	private val repository: Repository
     ) {
     	// 원하는 곳에 사용
     }
    

기존에는 viewModel에서 repository를 사용하기 위해서는 viewModelFactory를 제작하여 거기에서 repository의 의존성을 주입해줘야한다.

Hilt를 도입한 후에는 따로 의존성을 주입시켜주기 위한 Factory를 제작할 필요가 없어서 코드가 훨씬 깔끔하고 추후에 Clean Architecture 도입을 하기에도 쉬워진다.