본문으로 바로가기

Hilt 를 사용한 종속성 주입

category Studies/Android 2022. 4. 6. 23:54

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 사용이 잘 드러나 있다.

해당 오픈소스를 통해 사용법을 공부하면 되겠다.

썬 플라워 는 클린 아키텍쳐에 관해 공부할 때 많은 도움이 되는 좋은 오픈소스이다.

 

참조 - Hilt를 사용한 종속 항목 삽입  |  Android 개발자  |  Android Developers