전체 글85 [Inflearn] AppConfig 리팩터링(DIP 만족) 어떤 역할이 있고, 그 역할이 어떻게 구현되는지가 한 눈에 딱 보여야 한다. OrderServiceImpl 클라이언트코드DiscountPolicy 추상화 인터페이스에만 의존하도록 코드 변경(객체 지정을 AppConfig에게 맡김) AppConfig package hello.core;import hello.core.discount.FixDiscountPolicy;import hello.core.member.MemberService;import hello.core.member.MemberServiceImpl;import hello.core.member.MemoryMemberRepository;import hello.core.order.OrderService;import hello.core.order.Ord.. 2025. 2. 23. [Inflearn] 새로운 할인 정책 적용의 문제점 & 해결방안(관심사 분리) (SRP 만족) 앞에서 OrderServiceImpl 코드를 고쳐야 한다고 했었다. 역할과 구현을 충실하게 분리했는가? (YES)다형성도 활용하고, 인터페이스와 구현 객체를 분리했는가? (YES)OCP, DIP 같은 객체지향 설계 원칙을 충실히 준수했는가? (NO)문제점 * DIP "프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다"인터페이스뿐 아니라 구현 클래스에도 의존하고 있다.- 추상(인터페이스) 의존: DiscountPolicy- 구체(구현) 클래스 의존: FixDiscountPolicy, RateDiscountPolicy* OCP "변경하지 않고 확장이 가능하다"지금 코드는 기능을 확장해서 변경하면, 클라이언트 코드에 영향을 준다.(OrderServiceImpl 코드를 바꿔야 했다.) 쉽게 클래스 다.. 2025. 2. 7. [Inflearn] 새로운 할인 정책 개발 새로운 할인 정책을 확장해볼 거다. 원래 할인 정책이 FixDiscountPolicy() 를 사용하는 고정 금액 할인 정책이었다면,개발자가 할인 정책을 RateDiscountPolicy(), 정률%할인 정책으로 변경하고 싶다고 가정해볼 거다. package hello.core.discount;import hello.core.member.Grade;import hello.core.member.Member;public class RateDiscountPolicy implements DiscountPolicy{ private int discountPercent = 10; // 10% 할인 @Override public int discount(Member member, int price) .. 2025. 2. 2. [Inflearn] 주문과 할인 도메인 개발 이제 주문 도메인을 개발해볼 거다. package hello.core.order;public class Order { private Long memberId; private String itemName; private int itemPrice; private int discountPrice; public Order(Long memberId, String itemName, int itemPrice, int discountPrice) { this.memberId = memberId; this.itemName = itemName; this.itemPrice = itemPrice; this.discountPrice = discount.. 2025. 1. 30. 이전 1 2 3 4 5 6 7 ··· 22 다음