오늘도 더 나은 코드를 작성하였습니까?

Android Code Lab(Dagger2) 정리3 본문

DI/Dagger2

Android Code Lab(Dagger2) 정리3

hik14 2021. 12. 21. 16:08

여러 가지 이유로 Component에서 동일한 종속성 인스턴스를 제공받을 필요가 있다.

 

1. 서로 다른 type들이 종속성을 주입받아 생성되어 제공될때 동일한 종속성을 주입받아야 하는 경우.

2. 객체를 만드는 cost이 많이 들고 종속성으로 선언될 때마다 새 인스턴스를 만들고 싶지 않은 경우.

 

scope를 사용하면 동일한 객체를 Component로 부터 주입받을 수 있습니다. 

scope는 Component내의 제공받는 객체의 생명주기를 뜻합니다. 

 

scope를 Component가 주입하는 type에 지정한다는 것은 해당 type을 제공해야 할 때마다 동일한 인스턴스가 사용된다는 것을 의미합니다

 

AppComponent의 경우 javax.inject 패키지와 함께 제공되는 only scope annotation인 @Singleton 주석을 사용할 수 있습니다.

@Singleton으로 Component에 주석을 추가하면,  @Singleton으로 주석이 달린 모든 class 의 범위가 해당 수명으로 지정됩니다.

AppComponent.kt

@Singleton
@Component(modules = [StorageModule::class])
interface AppComponent { ... }

이제 @Singleton으로 주석이 달린 클래스는 AppComponent로 Scope가 지정됩니다

@Singleton
class UserManager @Inject constructor(private val storage: Storage) {
    ...
}

 

동일한 UserManager 인스턴스가 RegistrationActivity 및 MainActivity에 제공됩니다.

UserManager도 흰색 점으로 표시됩니다. Context와 마찬가지로 AppComponent의 동일한 인스턴스에서 종속성으로 필요할 때 UserManager의 동일한 인스턴스가 제공됩니다.

'DI > Dagger2' 카테고리의 다른 글

Android Code Lab(Dagger2) 정리5  (0) 2021.12.22
Android Code Lab(Dagger2) 정리4  (0) 2021.12.21
Android Code Lab(Dagger2) 정리2  (0) 2021.12.21
Android Code Lab(Dagger2) 정리1  (0) 2021.12.20
Android app에서 Dagger 사용  (0) 2021.05.03