Spring 핵심 원리 - 새로운 구조와 할인 정책 적용 (SOLID가 어떻게 적용되었는가)

김태훈·2023년 1월 10일
0

Spring 핵심 원리

목록 보기
8/15

할인 정책을 변경하려면 어떻게 해야할까?
--> 당연히 이제는 AppConfig 파일을 건드리면 될 것이다.

AppConfig의 등장

AppConfig의 등장으로 어플리케이션이 사용영역 과 객체를 생성하고 구현하는 구성영역 으로 분리가 되었다.

package Goat.core;

import Goat.core.discount.DiscountPolicy;
import Goat.core.discount.FixDiscountPolicy;
import Goat.core.discount.RateDiscountPolicy;
import Goat.core.member.MemberRepository;
import Goat.core.member.MemberService;
import Goat.core.member.MemberServiceImpl;
import Goat.core.member.MemoryMemberRepository;
import Goat.core.order.OrderService;
import Goat.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());
    }

    private static DiscountPolicy discountPolicy() {
//        return new FixDiscountPolicy();
        return new RateDiscountPolicy();
    }
    
}

- SRP

구현 객체를 생성하고 연결하는 것은 AppConfig가 담당.
클라이언트 객체는 '실행'만 담당.

- DIP

클라이언트가 추상화(Interface)에만 의존하게 바뀌었음. 그리고 AppConfig가 객체 인스턴스를 클라이언트 대신 생성해서 클라이언트 코드에 해당 객체를 Injection 함. -> DIP 적용

- OCP

AppConfig가 객체 인스턴스를 바꾸면, 클라이언트의 코드 변경없이 마음대로 요소를 새롭게 확장해나갈 수 있다.

profile
기록하고, 공유합시다

0개의 댓글