Dagger2를 알아보자 – 기본편
Dagger2를 알아보자 – Scope 
Dagger2를 알아보자 – Injection의 종류
Dagger2를 알아보자 – Qualifier (You’re here)
Dagger2를 알아보자 – Binding
Dagger2를 알아보자 – Multibinding
Dagger2를 알아보자 – SubComponent
Dagger2를 알아보자 – Android
Dagger2를 알아보자 – Testing(준비중)
Dagger2를 알아보자 – Dynamic Feature에 적용하기(준비중)


Qualifier

때때로 자료형(Type)만으로는 의존성을 식별하기에는 충분하지 않습니다. 예를들어 모듈내에서 두개의 String을 반환하는 @Provide 메소드가 있는 경우입니다.

@Module
public class NameModule{
    @Provides
    String provideName1(){
        return "Charles";
    }

    @Provides
    String provideName2(){
        return "Runa";
    }
}

String을 주입받기 위해 컴포넌트에게 요청할때 컴포넌트 입장에서는 어떤 String 객체를 주입해야 할지 애매모호 합니다. 그래서 @Qualifier 애노테이션을 통해 이문제를 해결할 수 있습니다. 기본적으로 javax.inject 패키지에서 제공하는 @Named 애노테이션을 적용한 예제를 살펴보겠습니다.

@Module
public class NameModule{
    @Provides
    @Named("me")
    String provideName1(){
        return "Charles";
    }

    @Provides
    @Named("you")
    String provideName2(){
        return "Runa";
    }
}

class Main{
    @Inject
    @Named("me")
    String name1;

    @Inject
    @Named("you")
    String name2;
    ...
}

Custom Qualifier 애노테이션을 만들 수도 있습니다.

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface CharlesType {
    String value();
}
Buy me a coffeeBuy me a coffee

0개의 댓글

답글 남기기

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