섹션 3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용
Ctrl +shift +T를 누르면 다음과 같이 뜬다.
성공테스트도 중요하지만 실패테스트도 꼭 만들어 봐야한다.
어떻게 해결할까?
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());
//생성자 주입
}
}
Appconfig는 애플리케이션의 실제 동작에 필요한 "구현 객체를 생성"한다.
Ctrl + E 과거 히스토리가 나온다.
DIP완성
memberServiceImpl 입장에서 보면 의존관계를 마치 외부에서 주입 해주는 것 같다고 해서
DI (Dependency Injection) 우리말로 의존관계 주입 또는 의존성 주입이라 한다.
AppConfig 리팩터링
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(new MemoryMemberRepository(),discountPolicy());
}
public DiscountPolicy discountPolicy(){
return new FixDiscountPolicy();
}
}
리팩터링의 장점
new MemoryMemberRepository() 이 부분이 중복 제거되었다.
이제 MemoryMemberRepository를 다른 구현체로 변경할 때 한 부분만 변경하면 된다.
AppConfig를 보면 역할과 구현 클래스가 한눈에 들어온다. 애플리케이션 전체 구성이 어떻게 되어있는지 빠르게 파악할 수 있다.
새로운 구조와 할인 정책 적용
앞으로 할인 정책을 변경해도, 애플리케이션의 구성 역할을 담당하는 AppConfig만 변경하면 된다. 클라이언트 코드인
OrderServiceImpl를 포함해서 사용 영역의 어떤 코드도 변경할 필요가 없다.
출처
스프링 핵심 원리 - 기본편 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...
www.inflearn.com
'프레임워크 > Spring' 카테고리의 다른 글
[스프링 입문] 섹션 4,5 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (0) | 2022.05.19 |
---|---|
[스프링 입문] 섹션 3 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (0) | 2022.05.14 |
[spring]스프링 핵심 원리 - 기본편 - 섹션2 (스프링 핵심 원리 이해1 - 예제만들기) (0) | 2022.03.24 |
[spring]스프링 핵심 원리 - 기본편 - 섹션1 (0) | 2022.03.20 |
[스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술]섹션 2 (0) | 2022.03.20 |