Free Lines Arrow
본문 바로가기
Spring/spring 기초 스터디

[Spring] AppConfig

by skahn1215 2021. 4. 20.
728x90
반응형

AppConfig를 왜 사용해야 될까?

문제점 찾기

다음과 같은 예제 코드가 있다고 하자

//예제코드
public class OrderServiceImpl implements OrderService {
    private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
}

 

위코드는 문제가 있다!

어디가 문제가 있을까
바로 OrderServiceImpl이  DiscountPolicy 객체를 의존하다는 것이다.

 

객체를 의존하고 있다?

OrderServiceImpl 클래스안에서 FixDiscountPolicy 객체를 생성하고 있다 
자세히 보면 다형성을 사용하여 DiscountPolicy 인터페이스에 FixDiscountPolicy를 생성하여 넣어준다.

만일 discountPolicy(인터페이스) 가 다른 정책으로 바뀐다고하자
그럼 해당 코드를 변경해 줘야한다.

public class OrderServiceImpl implements OrderService {
    // 변경 필요
    //private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
    private final DiscountPolicy discountPolicy = new RateDiscountPolicy();
}

 

 

 

 

문제점 해결

AppConfig가 등장하였다.

해결 방법

1. 객체만 선언한다.
2. 생성 자를 통해 주입을 받는다.

public class OrderServiceImpl implements OrderService {
    
    private final DiscountPolicy discountPolicy;
    
    public OrderServiceImpl(DiscountPolicy discountPolicy) {
        this.discountPolicy = discountPolicy;
    }
}

 

 

 


주입은 어디서 받을까?

AppConfig 클래스를 만들어 넣어주면 끝이다.

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

 

 

그림 설명
appconfig는 RateDiscountPolicy를 생성하고 

생성된 주소 값을 참조 하여 OrderServiceImpl 에 주입을 해준다.
아래처럼 변경사항이 있을때 간단하게 AppConfig만 변경하면된다.

 

 

 

 

 

참고: www.inflearn.com

 

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

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 개발자가 되어보세요! 📣 확인해주

www.inflearn.com

 

728x90
반응형

댓글