Spring/스프링 핵심 원리 - 기본편

AppConfig 리팩터링

코징 2022. 3. 14. 14:34

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이 어떻게 탄생하였는지, 한 걸음 더 다가섰다.

 

이 글은 인프런의

제목 : 스프링 핵심원리 기본편

강사 : 김영한 님의 동영상을 참조해 만들었습니다.