스프링 핵심 원리 - 기본편 | ISP, DIP가 지켜지지 않는다는 것 & 빈 자동 주입의 필요성

Yunny.Log ·2022년 5월 23일
0

Spring Boot

목록 보기
54/80
post-thumbnail

스프링 핵심 원리 이해2 - 객체 지향 원리 적용

  • Agile : 계획을 따르기보다 변화에 대응하기

새로운 할인 정책이 등장한다면?

  • 기존에 선언해둔 역할을 상속받은 새로운 구현체 클래스를 하나만 더 생성하기
package hello.demo.discount;

import hello.demo.member.Grade;
import hello.demo.member.Member;

public class RateDiscountPolicy implements DiscountPolicy {

    private  int discountPercent = 10;

    @Override
    public int discount(Member member, int price) {
        if(member.getGrade() == Grade.VIP){
            return price*discountPercent/100;
        }else{
            return 0;
        }
    }
}

새로운 할인 정책 적용과 문제점

  • 실제 적용 위해선 orderservice impl 에서 discountPloicy가 참조하는 아이를 바꿔주자
public class OrderServiceImpl implements  OrderService{

    private  final MemberRepository memberRepository = new MemoryMemberRepository();
    //private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
    private final DiscountPolicy discountPolicy = new RateDiscountPolicy();

=> OCP, DIP 같은 객체지향 설계 원칙을 충실히 준수하지 못했다
그렇게 보이지만 사실은 아니다.

DIP

  • 주문서비스 클라이언트( OrderServiceImpl )는 DiscountPolicy 인터페이스에 의존하면서
    클래스 의존관계를 분석해 보면, 추상(인터페이스) 뿐만 아니라 구체(구현) 클래스에도 의존하고
    있다.

1) 추상(인터페이스) 의존: DiscountPolicy
2) 구체(구현) 클래스: FixDiscountPolicy , RateDiscountPolicy

OCP

  • 변경하지 않고 확장할 수 있다고 했는데
    지금 코드는 기능을 확장해서 변경하면, 클라이언트 코드에 영향 o => 따라서 OCP를 위반

0개의 댓글