본문 바로가기
강의 실습/스프링 핵심 원리 - 기본편

AppConfig 리팩터링

by jint 2026. 4. 3.

1. AppConfig 리팩터링
AppConfig 에 중복이 있고, 역할에 따른 구현이 잘 안보인다.

1) 기대하는 구조

기대하는 구조


2) 리팩터링 전
- src/main/java/hello/core/AppConfig.java

public class AppConfig {

    public MemberService memberService() {
        return new MemberServiceImpl(new MemoryMemberRepository()); // 생성자 주입
    }

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

}


3) 리팩터링 후
중복 제거, 역할에 따른 구현이 보이도록 리팩토링

- src/main/java/hello/core/AppConfig.java

package hello.core;

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

}


# 중복 제거 : new MemoryMemberRepository() 부분의 중복을 제거하니, 다른 구현체로 변경시 한 부분만 변경하면 된다.
# 역할에 따른 구현 : 역할과 구현 클래스가 한 눈에 들어오니, 애플리케이션 전체 구성을 빠르게 파악 가능하다.


참고링크 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8?cid=325969

 

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

현재 평점 5.0점 수강생 49,524명인 강의를 만나보세요. 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 스프링 기본 기능, 스프

www.inflearn.com

댓글