개요
해당 게시글은 구글 코드랩을 번역한 게시글입니다.
Using Scope
가끔 한 컴포넌트에서 같은 객체를 의존성 주입해야하는 상황이 존재한다.
- 다른 곳에서 같은 인스턴스를 공유하기 원할 때 (e.g. UserManager)
- 객체 자체를 생성한는 데 매우 많은 비용이 소모되어 의존성 주입 시 마다 새로운 객체 생성을 원치 않을 때 (e.g. Json Parser)
Scope를 이용하여 컴포넌트에서 고유한 객체를 가지는게 가능해진다. 혹은 "컴포넌트의 수명주기로 타입을 스코핑한다"라고 말한다. 이 의미는 해당 타입을 제공할 때 마다 같은 인스턴스를 제공하는 것을 의미한다.
AppComponent의 경우 @Singleton Scope를 활용할 수 있다. 컴포넌트에 @Singleton으로 Scoping하면 @Singleton으로 처리된 모든 클래스 역시 수명 주기로 지정된다.
AppComponent.kt
@Singleton
@Component(modules = [StorageModule::class])
interface AppComponent { ... }
이제부터 @Singleton 주석이 달린 클래스는 AppComponent로 범위가 지정되며 동일한 객체 주입을 보장한다. 즉, @Singleton 주석이 달린 클래스는 AppComponent의 수명 주기 동안 같은 객체를 반환한다.
UserManager.kt
@Singleton
class UserManager @Inject constructor(private val storage: Storage) {
...
}
위를 통해 RegistrationActivity와 MainActivity는 동일한 UserManager를 공유하게 된다.
이제 다시 앱을 실행시켜 절차를 진행해보면 이전 포스팅의 버그가 해결된 것을 확인할 수 있다.
UserManager가 하얀 점으로 표시되었다.
'안드로이드' 카테고리의 다른 글
[Android] 8. 구글 코드랩 Dagger를 이용한 리팩토링 - Scoping Subcomponents (0) | 2021.04.27 |
---|---|
[Android] 7. 구글 코드랩 Dagger를 이용한 리팩토링 - Subcomponents (0) | 2021.04.27 |
[Android] 5. 구글 코드랩 Dagger를 이용한 리팩토링 - Main Flow (0) | 2021.04.27 |
[Android] 4. 구글 코드랩 Dagger를 이용한 리팩토링 - Registration Flow (0) | 2021.04.27 |
[Android] 3. 구글 코드랩 Dagger를 이용한 리팩토링 - Registration Flow (0) | 2021.04.27 |