Dagger 추가 Annotation - Named

매일 수정하는 GNOSS LV5·2021년 10월 1일
1

AndroidStudio

목록 보기
19/83

또 다른 버거를 추가하고싶어요!
생성하고 싶은 Burger가 한개 더 생겼습니다!

class ShirimpPatty :Patty{
    override fun getPatty() = "새우"
}

class MealBun : Bun{
    override fun getBun() = "통밀"
}

모듈에 무엇을 넣는지 알려주어야 겠습니다.

@Module
class BurgerModule {

    @Provides
    fun provideBun(): Bun = HomilBun()

    @Provides
    fun providePatty(): Patty = BulgogiPatty()

    @Provides
    fun provideMarkekt() : Market = Lottelia()

---------------
    @Provides
    fun provideNewBun() : Bun = MealBun()

    @Provides
    fun provideShrimpPatty() : Patty = ShirimpPatty()
    

---------------
    @Provides
    fun provideBurger(bun :Bun, patty : Patty,market: Market) = Burgers(bun,patty,market)

}

하지만 이렇게 되면 맨 마지막 provideBurger부분에서 어떤 버거인지 알 수 없습니다. 두개의선택지가 있기 때문이죠.

이걸 위해서 사용하는 것이 @Named 입니다.

@Module
class BurgerModule {

    @Provides
    @Named("Bulgogi")
    fun provideBun(): Bun = HomilBun()

    @Provides
    @Named("Bulgogi")
    fun providePatty(): Patty = BulgogiPatty()

    @Provides
    @Named("Bulgogi")
    fun provideMarkekt() : Market = Lottelia()

    @Provides
    @Named("Shirmp")
    fun provideNewBun() : Bun = MealBun()

    @Provides
    @Named("Shrimp")
    fun provideShrimpPatty() : Patty = ShirimpPatty()

//    @Provides
//    fun provideBurger(bun :Bun, patty : Patty,market: Market) = Burgers(bun,patty,market)
		@Provides
    @Named("BulgogiBurger")
    fun provideBulgogiBurger(@Named("Bulgogi")bun :Bun, @Named("Bulgogi")patty : Patty,@Named("Bulgogi")market: Market) = Burgers(bun,patty,market)

    @Provides
    @Named("ShirimpBurger")
    fun provideShirimpBurger(@Named("Shirimp")bun :Bun, @Named("Shirimp")patty : Patty,@Named("Bulgogi")market: Market) = Burgers(bun,patty,market)
}

롯데리아는 유지하고 싶어서 Bulgogi라고 Named를 정해주고 새우버거에도 @Named(Bulgogi)라고 해주었습니다.

이제 컴포넌트에서 호출을 분할해줍니다.

@Component(modules = [BurgerModule::class])
interface BugerComponent {
//    fun callBurgers(): Burgers

    @Named("BulgogiBurger")
    fun CallBulgogi() : Burgers

    @Named("ShirimpBurger")
    fun CallShrimp() : Burgers
}

마지막으로 메인에서 호출해줍니다.

	val bulgogiBurger = DaggerBugerComponent.create().CallBulgogi()
        val shirimpBurger = DaggerBugerComponent.create().CallShrimp()

        bulgogiBurger.info()
        shirimpBurger.info()
    }
profile
러닝커브를 따라서 등반중입니다.

0개의 댓글