Dagger2를 알아보자 – 기본편 
Dagger2를 알아보자 – Scope 
Dagger2를 알아보자 – Injection종류 (You’re here)
Dagger2를 알아보자 – Qualifier
Dagger2를 알아보자 – Binding
Dagger2를 알아보자 – Multibinding


인젝션의 종류(Direct vs Lazy vs Provider)

인젝션의 종류에 대한 차이점은 위의 모듈을 통해 설명하겠습니다.

Direct injection

일반적인 인젝션인 경우입니다. 한번 주입받은 객체는 여러번 참조해도 처음 주입받은 같은 객체입니다.

결과:
computing…
printing…
100
100
100

Lazy injection

객체가 초기화하는데 시간이 필요하다면 Lazy 인젝션을 고려해볼수 있습니다. 바인딩 될 타입을 위해 Lazy<타입>을 만들어 주기만 하면됩니다. Lazy<타입> 객체의 get() 메소드를 호출 해주기 전까지는 객체가 초기화 되는것을 늦출 수 있습니다. Lazy 타입의 객체도 같은 그래프 내에서 싱글톤으로 관리 가능합니다.

get()메소드를 통해 얻은 객체 또한 초기화만 늦출뿐 매번 호출해도 같은 객체입니다. 그러므로 결과는 아래와 같습니다.

결과:
computing…
printing…
100
100
100

Provider injection

@Inject된 Provider에대해 get()이 호출될때마다 새로운 인스턴스가 만들어 집니다. 하나의 Provider 객체로 여러 인스턴스가 반환될 수 있습니다. 몇개의 옵션 (팩토리, 빌더 등)을 가지고있는 동안, T 대신에 Provider <T>를 주입하는 옵션이 있습니다. @Inject생성자에 대해서는 새로운 인스턴스를 만들지만, @Provides메소드에 대해서는 보장하지 않습니다.

대개의 경우 Provider를 사용하는것은 그래프내에서 잘못된 Scope나 설계패턴을 만들어낼 수 있습니다. 그래도 드물게 필요한 경우가 있으니 알아두시면 좋습니다. 

Provider로부터 get()을 호출하면 매번 새로운 객체를 생성하게 되어 다음과 같은 결과를 보입니다.

결과:
printing…
computing…
100
computing…
101
computing…
102

Buy me a coffeeBuy me a coffee

답글 남기기

이메일은 공개되지 않습니다.