본문 바로가기

Development/Spring Boot

[Spring Boot] 새로운 구조 및 구현체 적용

1- 강의 노트

- AppConfig의 등장으로 애플리케이션의 사용 영역과 객체를 생성하고 구성(configuration)하는 영역이 분리됨

- 만약 적용되는 할인 정책이 변경된다면, 클라이언트 코드 영역은 변경할 필요 없이 AppConfig만 수정하면됨

- 구성 영역은 당연히 변경됨. 세부적인 내용이 바뀔 수 있기 때문임.

 

2- 변경 예시

package hello.core;

import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.discount.RateDiscountPolicy;
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;

/**
 * Application 전체를 구성하고 설정하는 역할
 *  - 로미오 줄리엣 공연 예시 중 기획자
 *  - 어플리케이션에 대한 환경 구성을 모두 이곳에서 함
 */
public class AppConfig {

    // 생성자 주입: 생성자를 통해서 객체가 주입되는 것
    // 중복된 코드 잡아주는 단축키 (맥 기준) : 옵션 + 커맨드 + M
    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }

    private MemoryMemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

    public OrderService orderService() {
        return new OrderServiceImpl(memberRepository(),discountPolicy());
    }

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

}

- 정액법에서 정율법으로 바꾼거 예시

 

 

3- 토탈 코드

- 현재까지 전체 코드를 보면 OCP와 DIP를 모두 준수해 클라이언트 코드에서 변경은 불필요해짐

 

https://github.com/Jeong-sky-1003/core.git

 

GitHub - Jeong-sky-1003/core

Contribute to Jeong-sky-1003/core development by creating an account on GitHub.

github.com