티스토리 뷰

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)

해당 글은 '아키텍처를 알아야 앱 개발이 보인다' 를 공부하며 요약 정리한 글 입니다.
댓글
최근에 올라온 글
최근에 달린 댓글
네이버 이웃추가
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함