성실한 사람이 되자

성실하게 글쓰자

This is spear

JAVA_SPRING

SPRING - 조회한 빈을 모두 사용해야 할 때 (List, Map 이용)

Imaspear 2021. 12. 28. 20:40
728x90

할인 서비스를 제공하는데 클라이언트가 할인의 종류(rate, fix)를 선택할 수 있다고 가정할 때, 스프링을 사용하면 소위 말하는 전략 패턴을 이용해 매우 간단하게 구현할 수 있다.

 

로직 분석

  1. DiscountService는 Map으로 모든 DiscountPolicy 타입의 구현체를 주입받는다. 이때, fixDiscountPolicy, rateDiscountPolicy 구현체가 주입된다.
  2. dicount() 메서드는 dicountCode로 fixDiscountPolicy 구현체가 넘어오면 map에서 fixDiscountPolicy 스프링 빈을 찾아 실행한다. 물론, rateDiscountPolicy 구현체가 넘어오면 rateDiscountPolicy 구현체가 실행된다.

 

주입 분석

  • Map<String, DiscountPolicy>
    • map 키에 스프링 빈의 이름을 넣어주고, 그 값으로 DiscountPolicy 타입으로 조회한 모든 스프링 빈을 담는다.
  • List
  • ◦ DiscountPolicy 타입으로 조회한 모든 스프링 빈을 담아준다.
  • 만약 해당하는 타입의 스프링 빈이 없으면, 빈 컬렉션이나 Map을 주입한다.