본문 바로가기
Spring/Spring core basic

[Spring core basic] 11 - AppConfig 리팩토링

by Kloong 2022. 5. 2.

참고

더보기

Spring core basic 시리즈는 김영한 님의 "스프링 핵심 원리 - 기본편" 강의를 정리한 글입니다. 글에 첨부된 사진은 해당 강의의 강의 자료에서 캡쳐한 것입니다. 제 Github에만 올려뒀다가, 정보 공유와 강의 홍보(?)를 위해 블로그에도 업로드합니다. 마크다운을 잘 쓰지 못해서 가독성이 조금 떨어지는 점 양해 바랍니다.

 

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

AppConfig 리팩토링

현재 AppConfig를 보면 중복이 존재하고, 역할에 따른 구현의 관계가 한 눈에 보이지 않는다.

AppConfig.java (리팩토링 이전)

package com.kloong.corebasic1;

//import 생략

public class AppConfig {

    public MemberService memberService() {
        return new MemberServiceImpl(new MemoryMemberRepository());
    }

    public OrderService orderService() {
        return new OrderServiceImpl(
        new MemoryMemberRepository(), new FixDiscountPolicy());
    }
}

AppConfig가 애플리케이션 전체 구조를 구성(설정)해 주는 역할을 하는데, 코드에서 이 그림이 잘 보이지 않는다. 따라서 리팩토링을 해주자.

AppConfig를 통해 한 눈에 보였으면 하는 그림

AppConfig.java (리팩토링 이후)

package com.kloong.corebasic1;

//import 생략

public class AppConfig {

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

    private DiscountPolicy discountPolicy() {
        return new FixDiscountPolicy();
    }

    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }

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

}

AppConfig.java만 보면 역할과 그 역할에 대한 구현 클래스가 한눈에 들어온다. 애플리케이션 전체 구성이 어떻게 되어있는지 빠르게 파악할 수 있다.

new MemoryMemberRepository() 코드의 중복이 제거되었다. 만약 구현체를 변경할 일이 생기면 중복된 코드를 여러개 변경할 필요가 없다.

댓글