-
Spring 기본5 - AppConfig 리팩토링FrameWork/Spring&Spring-boot 2023. 11. 9. 13:27
AppConfig 리팩토링
현재 AppConfig를 보면 중복이 있고 역할에 따른 구현이 잘 안보인다.
*기대하는 그림*
구성 정보(AppConfig)에는 역할이 있고, 역할에 따른 구현을 어떻게 하는지가 한눈에 보여야 한다. 즉 각 역할들을 들어나게 하는 것이 중요하다.
⌨️ tip) 인델리제이 단축키
Ctrl + Alt + M - Extract Method*리팩토링 전*
package com.hello.core; import com.hello.core.discount.FixDiscountPolicy; import com.hello.core.member.MemberService; import com.hello.core.member.MemberServiceImpl; import com.hello.core.member.MemoryMemberRepository; import com.hello.core.order.OrderService; import com.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 com.hello.core; import com.hello.core.discount.DiscountPolicy; import com.hello.core.discount.FixDiscountPolicy; import com.hello.core.member.MemberRepository; import com.hello.core.member.MemberService; import com.hello.core.member.MemberServiceImpl; import com.hello.core.member.MemoryMemberRepository; import com.hello.core.order.OrderService; import com.hello.core.order.OrderServiceImpl; public class AppConfig { public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } private static MemberRepository memberRepository() { return new MemoryMemberRepository(); } public OrderService orderService(){ return new OrderServiceImpl(memberRepository(), discountPolicy()); } public DiscountPolicy discountPolicy(){ return new FixDiscountPolicy(); } }
각 역활 즉 각 인터페이스에 type에 해당하는 구체 구현 객체(인스턴스)를 반환하는 메서드들이 만들어져서 메서드를 살펴보면 보다 역할에 따른 구현을 알아보기 용이하다.
- new MemovyMemberRepository() 부분의 중복이 제거 되었다. 이제 MemoryMemberRepository를 다른 구현제로 변경할 때 한 부분만 변경하면 된다.
- AppConfig를 보면 역할과 구현 클래스가 한눈에 들어온다. 애플리켕션 전체 구성이 어떻게 되었는지 빠르게 파악할 수 있다.
[출처 - 스프링 핵심 원리 - 기본편]
스프링 핵심 원리 - 기본편 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보세요! 📢
www.inflearn.com
'FrameWork > Spring&Spring-boot' 카테고리의 다른 글
Spring 기본 7 - 좋은 객체 지향 설계의 5가지 원칙 적용 (0) 2023.11.09 Spring 기본 6 - 새로운 구조와 할인 정책 적용, 전체 흐름 정리 (0) 2023.11.09 Spring 기본 4 - 관심사의 분리 (1) 2023.11.09 Spring 기본3 - 객체 지향 원리 적용, OCP,DIP 위반의 문제 (1) 2023.11.09 Spring 기본2 - 주문 할인 도메인 설계 (1) 2023.11.07