DI에 관한 개념은 안드로이드 개발자라면 숙지하고 있어야 한다.
뒤쳐지지 않는 개발자가 되려면 Hilt와 같은 라이브러리에 대해서도 알고 있어야 한다.
Hilt 란 무엇인가?
수동으로 클래스간의 종속성을 관리하고 수명주기를 관리하려면 일명 Boilerplate code 가 늘어난다.
예를 들어, 종속성을 수동으로 관리할 경우 수명주기를 관리하기 위해 다음과 같이 onDestroy() 에서 널처리를 해줘야 한다.
class LoginActivity: Activity() {
private lateinit var loginViewModel: LoginViewModel
private lateinit var loginData: LoginUserData
private lateinit var appContainer: AppContainer
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
appContainer = (application as MyApplication).appContainer
// Login flow has started. Populate loginContainer in AppContainer
appContainer.loginContainer = LoginContainer(appContainer.userRepository)
loginViewModel = appContainer.loginContainer.loginViewModelFactory.create()
loginData = appContainer.loginContainer.loginData
}
override fun onDestroy() {
// Login flow is finishing
// Removing the instance of loginContainer in the AppContainer
appContainer.loginContainer = null
super.onDestroy()
}
}
로그인 컨테이너를 만들어 종속성을 관리한 후 onDestroy() 에서 널처리를 해주는 모습이다. 위와 같이 해주지 않는다면 메모리에 계속 남게 되어 불필요한 비용을 초래한다.
이러한 번거로운 종속성 수명 주기 관리를 자동으로 해주는 라이브러리가 바로 Dagger이고, Dagger 에서 좀 더 발전한 것이 바로 Hilt다. 그렇다, 안드로이드 개발자들은 종속성 라이브러리를 위한 가장 최신 라이브러리로 Hilt를 사용한다.
Hilt는 다음 클래스들을 지원한다.
- Application(@HiltAndroidApp을 사용하여)
- Activity
- Fragment
- View
- Service
- BroadcastReceiver
Hilt를 사용하는 모든 앱은 @HiltAndroidApp으로 주석이 지정된 Application 클래스를 포함해야 한다.
@HiltAndroidApp
class ExampleApplication : Application() { ... }
오픈소스 Sunflower 프로젝트 에 Hilt 사용이 잘 드러나 있다.
해당 오픈소스를 통해 사용법을 공부하면 되겠다.
썬 플라워 는 클린 아키텍쳐에 관해 공부할 때 많은 도움이 되는 좋은 오픈소스이다.