

여기서 Android Class는 Application, Activity, Service, Fragment, BroadcastReceiver, ViewModel 등을 지칭하고 Client로써 컴파일 타임에 Container에 의존성을 요청한다.
Hilt Component는 Client에 받은 요청을 컴파일 타임에 의존성 주입을 위한 코드를 생성하고 런타임에 의존성을 Client에 주입해준다. 의존성의 생명주기를 관리하고 제공한다.
컴포넌트에 의존성을 추가하고 관리하는 행위를 바인딩이라고 한다. 또는 의존성 그 자체를 바인딩이라고 부르기도 한다.

컴파일 타임에 결함을 체크하는 것이 Hilt의 장점이다.
의존성 주입은 @Inject annotation을 사용하는 것부터 시작한다.
의존성 주입 종류
1. 생성자 주입
class Foo @Inject construct(bar: Bar){
}
이 때 의존성을 주입받는 Foo클래스도 Hilt Component에 바인딩된다.
따라서 다른 곳에서 Foo 의존성을 요청하면 의존성 주입이 가능해진다.
(생성자 주입과 바인딩을 동시해 처리해준다.)
2. 필드 주입
안드로이드 클래스는 생성자 주입을 할수없기 때문에 필드 주입을 주로 한다.
@AndroidEntryPoint
class AndroidClass: ... {
@Inject
lateinit var bar: Bar
}
@AndroidEntryPoint
class AndroidClass: ... {
@Inject
fun setBar(bar: Bar){
}
}
안드로이드 클래스에서 필드 주입이 메서드 주입보다 먼저 수행된다.