-
AppConfig 리팩터링FrameWork/Spring&Spring-boot 2021. 12. 30. 14:33
-현재 AppConfig를 보면 *중복*이 있고, *역할*에 따른 *구현*이 잘 안보인다.
*기대하는 그림*
*리팩터링 전*
package hello.core; import hello.core.discount.FixDiscountPolicy; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; public class AppConfig { public MemberService memberService(){ return new MemberServiceImpl(new MemoryMemberRepository()); } public OrderService orderService(){ return new OrderServiceImpl( new MemoryMemberRepository(), new FixDiscountPolicy()); } }
*리팩터링 후*
package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; public class AppConfig { public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } private MemoryMemberRepository memberRepository() { return new MemoryMemberRepository(); } public OrderService orderService(){ return new OrderServiceImpl(memberRepository(), discountPolicy()); } public DiscountPolicy discountPolicy(){ return new FixDiscountPolicy(); } }
- 'new MemoryMemberRepository()'이 부분이 중복 제거 되었다. 이제 'MemoryMemberRepository'를 다른 구현체로 변경할 때 한 부분만 변경하면 된다.
- 'AppConfig'를 보면 역할과 구현 클래스가 한눈에 들어온다. 애플리케이션 전체구성이 어떻게 되었는지 빠르게 파악할 수 있다.
[출처 : 김영한. 스프링 핵심 원리-기본편. 인프런]
'FrameWork > Spring&Spring-boot' 카테고리의 다른 글
좋은 객체 지향 설계의 5가지 원칙 적용 (0) 2021.12.31 새로운 구조와 할인 정책 적용 (0) 2021.12.30 관심사의 분리 (0) 2021.12.30 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 (0) 2021.12.29 Junit-Assert 메소드 (0) 2021.12.29