Mobile/Android(Kotlin)

[Android] Dive inti concept of Hilt Annotations. @_@

개발왕 금골드 2022. 11. 20. 13:53
반응형

Introduce

  • Hilt는 Android Application에 Dagger Dependency Injection을 통합하는 표준화된 방법을 제공한다.
  • Hilt를 사용하면 Android 앱에 종속성 주입을 쉽게 추가할 수 있다.
  • Hilt의 목표
    • Android Application을 위한 Dagger 관련 인프라를 단순화한다.
    • 가독성, 이해 및 코드 공유를 용이하게 하는 Standard set of Components 및 Scopes를 만든다.
    • 다양한 빌드 유형에 서로 다른 바인딩을 쉽게 프로비저닝 할 수 있는 방법을 제공한다.

Hilt Application

  • Hilt를 사용하는 모든 앱은 @HiltAndroidApp Annotation이 포함된 Application class를 사용해야 한다.
  • @HiltAndroidApp은 Hilt Components의 코드 생성을 시작하고 생성된 Components를 사용하는 응용 프로그램의 기본 클래스를 생성한다.
  • 코드 생성에는 모든 모듈에 대한 접근 권한이 필요하기 때문에 Application class를 컴파일하는 대상에는 모든 Dagger modules에 대한 종속성이 있어야 한다.
  • 다른 Hilt Android entry points와 마찬가지로 Applications 또한 주입된 멤버이다. 즉, super.onCreate()가 호출된 후 Application에서 주입된 필드를 사용할 수 있다.
  • 모든 주입된 필드는 onCreate에 생성되므로 나중에 혹은 조건부로 객체가 필요한 경우 Provider를 사용하여 주입을 연기할 수 있다.
@HiltAndroidApp
class MyApplication : MyBaseApplication() {
  @Inject lateinit var bar: Bar

  override fun onCreate() {
    super.onCreate() // Injection happens in super.onCreate()
    // Use bar
  }
}

@AndroidEntryPoint

  • @AndroidEntryPoint Annotation을 사용하여 다른 Android class에서 멤버 주입을 사용 가능으로 설정할 수 있다. 다음 다섯 가지 타입에서 주석을 사용할 수 있다. (ViewModel은 @HiltViewModel이라는 분리된 API를 통해 접근이 가능하다.)
  1. Activity
  2. Fragment
  3. View
  4. Service
  5. BroadcastReceiver
@AndroidEntryPoint
class MyActivity : MyBaseActivity() {
  @Inject lateinit var bar: Bar // Bindings in SingletonComponent or ActivityComponent

  override fun onCreate() {
    // Injection happens in super.onCreate().
    super.onCreate()

    // Do something with bar ...
  }
}

자세한 정보 :
https://kumgo1d.tistory.com/m/105

 

[Android] Hilt AndroidEntryPoint Annotation

Introduce Application에서 멤버 주입을 사용 가능으로 설정한 후, @AndroidEntryPoint Annotation을 사용하여 다른 Android class에서 멤버 주입을 사용 가능으로 설정할 수 있다. 다음 유형에서 @AndroidEntryPoint를

kumgo1d.tistory.com

Android Entry Points (dagger.dev)

 

Android Entry Points

Note: Examples on this page assume usage of the Gradle plugin. If you are not using the plugin, please read this page for details. Android types Once you have enabled members injection in your Application, you can start enabling members injection in your o

dagger.dev

Hilt Modules

  • Hilt Modules는 module을 install할 Hilt Components를 결정하는 @InstallIn Annotation이 있는 표준 Dagger Modules이다.
  • Hilt Components가 생성되면 @InstallIn Annotation이 달린 모듈이 각각 @Component#modules 또는 @Subcomponent#modules를 통해 해당 Component 또한 Subcomponent에 설치된다.
  • Dagger에서와 마찬가지로 Component에 모듈을 설치하면 해당 Componet 계층에서 SubComponent는 Component의 Binding에 접근할 수 있다.
  • 마찬가지로 해당 @AndroidEntryPoint class에서도 접근할 수 있고, Component에 설치하면 Binding 범위를 지정할 수도 있다.
  • 요약 : @InstallIn이 포함된 모듈은 Hilt Components에 설치될 수 있다.
@Module
@InstallIn(SingletonComponent::class) // Installs FooModule in the generate SingletonComponent.
internal object FooModule {
  @Provides
  fun provideBar(): Bar {...}
}

자세한 정보 :
https://kumgo1d.tistory.com/m/106

 

[Android] Hilt Components

Component Hierarchy 기존 Dagger와 달리 Hilt 사용자는 Dagger의 Components를 직접 정의하거나 인스턴스화하지 않는다. 대신 Hilt는 사용자를 위해 생성되는 미리 정의된 Components를 제공한다. Hilt는 안드로이

kumgo1d.tistory.com

Hilt Components (dagger.dev)

 

Hilt Components

Note: The following page assumes a basic knowledge of Dagger, including components, modules, scopes, and bindings. (For a refresher, see Dagger users guide.) Component hierarchy Unlike traditional Dagger, Hilt users never define or instantiate Dagger compo

dagger.dev

 
 

참고자료 :
Quick Start Guide (dagger.dev)

 

Quick Start Guide

Introduction Hilt makes it easy to add dependency injection to your Android app. This tutorial will guide you through bootstrapping an existing app to use Hilt. For more on the basic concepts of Hilt’s components, check out Hilt Components. Gradle vs non

dagger.dev

 

반응형