저번 포스팅에 solid에 대해서 언급하였다.
그중 OCP,DIP 가있는데,
다시 간단히 정리하자면
OCP는 확장은 가능하지만, 변경을 하지말라 였고
DIP는 구현 클래스에 의존하지말고 인터페이스에 의존하라는 애기이다.
public class OrderServiceImpl implements OrderService {
// private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
private final DiscountPolicy discountPolicy = new RateDiscountPolicy();
}
OrderService 인터페이스에 두 구현체가있다. FixDiscountPolicy, RateDiscountPolicy();
여기서 OrderServiceImpl의 discountPolicy를 저렇게 주석처리로 바꾼다면,
DIP,OCP의 원치에 어긋난다.
구현체에 의존하였고, 직접 코드를 변경하였기 때문이다.
이를 해결하기위해, AppConfig를 사용해보자
해당 폴더에 AppConfig.class를 생성한후
다음과 같이 작성을한다. 이것을 생성자 주입이라고한다.
여기서 어떤 구현체가 들어갈지 정하는것이다.
여기서 OrderServiceImpl 클래스에 들어가보면
짠, 해당 레파지토리는 단순 선언만 되었있고, 생성자를 통해 객체를 받는다. 해당 구현체에서는 별다른 선택을 하지않고,
본인의 일만 수행한다. 역할과 행동을 분리 한 사례라고 볼 수 있다.
'Spring' 카테고리의 다른 글
spring bean, AppConfig, @Configuration @Bean .. (0) | 2021.11.05 |
---|---|
IoC,DI 그리고 컨테이너 (0) | 2021.11.05 |
SOLID(객체지향 설계 5가지원칙) (0) | 2021.11.03 |
Spring 이란 (0) | 2021.11.03 |
web.xml (0) | 2021.04.28 |