스프링 핵심 원리 이해2 - 객체 지향 원리 적용
새로운 할인 정책 개발
새로운 할인 정책 적용과 문제점
문제코드 (OCP, DIP 위반):
관심사의 분리(해결방안 : 생성자 주입) , AppConfig 리팩토링
memberServiceImpl
입장에서 보면 의존관계를 마치 외부에서 주입해주는 것 같다고 해서 DI(Dependency Injection) 우리말로 의존관계 주입 또는 의존성 주입이라 한다.Test 코드(BeforeEach 애노테이션 적용 <- 테스트 전 AppConfig 실행)
AppConfig 리팩토링
변경 전 :
변경 후 :
새로운 구조와 할인 정책 적용(SOLID 원칙 활용) <- 여기서 3가지 SRP, DIP, OCP 적용
public DiscountPolicy discountPolicy() { return new RateDiscountPolicy(); //return new FixDiscountPolicy(); }
IoC, DI, 그리고 컨테이너
OrderServiceImpl
도 AppConfig가 생성한다. 그리고 AppConfig는 OrderServiceImpl
이 아닌 OrderService 인터페이스의 다른 구현 객체를 생성하고 실행할 수 도 있다. 그런 사실도 모른체 OrderServiceImpl
은 묵묵히 자신의 로직 을 실행할 뿐이다. 이렇듯 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)이라 한다.스프링으로 전환하기
코드가 약간 더 복잡해진 것 같은데, 스프링 컨테이너를 사용하면 어떤 장점이 있을까?