또 다른 버거를 추가하고싶어요!
생성하고 싶은 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()
}