1) AppConfig 리팩터링 설명
현재 AppConfig를 보면 "중복"이 있고, "역할"에 따른 "구현"이 잘 안 보인다.
한눈에 보일 수 있도록 수정해 보자.!
2) AppConfig 코드 리팩터링
package hello.core;
import hello.core.discout.DiscountPolicy;
import hello.core.discout.RateDiscountPolicy;
import hello.core.member.MemberRepository;
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());
}
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public DiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
}
}
그림 - 사용, 구성의 분리
장점
- 중복 코드 제거와 리팩터링을 통해서 우리는 이제 구현이 어떻게 되어 있는지 한눈에 확인할 수 있으며, 어떻게 동작되는지 짐작할 수 도 있게 되었다.
- OCP 구성과 사용 영역을 분리함으로서, 구성에서의 확장성이 용이해지고, 수정에는 닫혀있게 설계되었다.
- SRP 구현 객체를 생성하고 연결하는 책임은 AppConfig가 담당, 클라이언트 객체는 실행하는 책임만 담당
- DIP 클라이언트 코드가 추상화 인터페이스에만 의존하도록 변경
결론
구성과 사용영역을 분리해서, 소스코드의 확정성을 용이하게 만들고, 수정에는 닫혀있어서, 기획자의 정책 수정에도 언제든지 변경 가능한 소스코드가 구현이 되었다. Spring이 어떻게 탄생하였는지, 한 걸음 더 다가섰다.
이 글은 인프런의
제목 : 스프링 핵심원리 기본편
강사 : 김영한 님의 동영상을 참조해 만들었습니다.
'Spring > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
스프링 컨테이너와 스프링 빈 - 다양한 설정 형식 지원 - XML로 AppConfig 설정하기 (0) | 2022.03.15 |
---|---|
스프링 컨테이너와 스프링 빈 - BeanFacotry와 ApplicationContext (0) | 2022.03.15 |
스프링 빈 으로 전환하기 (0) | 2022.03.14 |
스프링 핵심 원리 이해 - 예제 만들 (0) | 2022.03.11 |
스프링 핵심 원리 - 기본편 - 객체 지향 설계와 스프링 (0) | 2022.03.11 |