FrameWork/Spring&Spring-boot
Spring 기본5 - AppConfig 리팩토링
Surge100
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