10. 범위 지정하기
- 각 컴포넌트에
@Scope
로 범위 지정 가능 - 하나의 인스턴스만 만들어서 참조하는 싱글턴 패턴과 비슷
- 컴포넌트의 인스턴스는 의존성의 제공 방법에 대한 동일 성을 보장 받을 수 있음
- 앱 생명주기와는 달리 별도로 생명 주기를 따로 관리 가능
- example
- 안드로이드에서 애플리케이션, 엑티비티, 프래그먼트 인스턴스에 때한 범위 지정을 다르게 해서 관리하여 오브젝트 그래프의 생성과 소멸을 각자 관리 가능함
@Singleton
사용하기
@Singleton
을 사용한 범위 지정 및 객체 재사용
@Singleton
@Component(modules = [MyModule2::class])
interface MyComponent2{
fun getAny():Any
}
@Module
class MyModule2{
@Provides
@Singleton
fun provideAny() = Any()
}
@Test
fun test_anyIdentity(){
val myComponent = DaggerMyComponent2.create()
val temp1 = myComponent.getAny()
val temp2 = myComponent.getAny()
assertNotNull(temp1)
assertNotNull(temp2)
assertSame(temp1, temp2)
}
@Reusable
사용하기
- 특정 컴포넌트 스코프에 종속되지 않아 컴포넌트에
@Reusable
을 선언하지 않아도 된다 - 이전 객체를 재사용할 수 있다면 재사용. 아니면 새로 생성
- 인스턴스의 동일성을 보장하지는 않지만, 항상 동일 인스턴스가 필요한게 아니라면 메모리 관리측면에서 좀 더 효율적임
@Scope
확장하기
- 스코프를 직접 만들어서 컴포넌트의 범위 지정하기
@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class UserScope{
}
@Module
class MyModule2{
@Provides
@UserScope
fun provideAny() = Any()
}
2021.07.24 - [Android/클린 아키텍처] - [Clean Architecture] 10-한정자 (@named)
2021.07.23 - [Android/클린 아키텍처] - [Clean Architecture] 09-Lazy 주입 & Provider 주입 (dagger)
2021.07.22 - [Android/클린 아키텍처] - [Clean Architecture] 08-Dagger2의 컴포넌트(Component)
해당 글은 '아키텍처를 알아야 앱 개발이 보인다' 를 공부하며 요약 정리한 글 입니다.
'Android > 클린 아키텍처' 카테고리의 다른 글
[Clean Architecture] 13-Dagger 멀티 바인딩 하기 (0) | 2021.07.27 |
---|---|
[Clean Architecture] 12-바인딩의 종류 (Dagger) (0) | 2021.07.26 |
[Clean Architecture] 10-한정자 (@named) (0) | 2021.07.24 |
[Clean Architecture] 09-Lazy 주입 & Provider 주입 (dagger) (0) | 2021.07.23 |
[Clean Architecture] 08-Dagger2의 컴포넌트(Component) (0) | 2021.07.22 |