분류 전체보기115 Spring - 지금까지의 전체 흐름 정리 지금까지의 코드 새로운 할인 정책 개발 새로운 할인 정책 적용과 문제점 (dip, ocp 위반) 관심사의 분리 (추상화에만 의존, 구체화에는 의존도 없도록) AppConfig 리팩터링 (전체 앱을 구성하는 기능을 따로 appconfig로 빼둠) 새로운 구조와 할인 정책 적용 새로운 할인 정책 개발 다형성 덕분에 새로운 정률 할인 정책 코드를 추가로 개발하는 것 자체는 아무 문제가 없음 새로운 할인 정책 적용과 문제점 새로 개발한 정률 할인 정책을 적용하려고 하니 클라이언트 코드인 주문 서비스 구현체도 함께 변경해야함 주문 서비스 클라이언트가 인터페이스인 DiscountPolicy 뿐만 아니라, 구체 클래스인 FixDiscountPolicy 도 함께 의존 -> DIP 위반 AppConfig 리팩터링 구성 .. 2023. 7. 7. Spring - AppConfig 중복을 제거하고, 역할에 따른 구현이 보이도록 리팩터링 하자. 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.. 2023. 7. 7. Spring - DIP, OCP를 지키는 도메인 서비스 기존 코드는 이렇게 추상화와 구현체에 모두 의존하고 있지만 이를 생성자를 통해서 분리해주면 아래와 같은 코드가 되면서 MemberServiceImpl에서는 MemoryMemberRepository()인 구현체에 대해서는 의존하지 않기 때문에, DIP를 위반하지 않게된다. 대신 AppConfig에서 MemberService인터페이스는 그의 구현체인 MemberServiceImpl을 부르고, 구현체를 부를때 인수를 통해 MemoryMemberRepository를 생성해서 넣어주게 된다. (생성자 주입) 설계 변경으로 MemberServiceImpl 은 MemoryMemberRepository 를 의존하지 않는다! 단지 MemberRepository 인터페이스만 의존한다. MemberServiceImpl 입장.. 2023. 7. 7. spring - 회원 도메인 설계 회원 도메인 요구사항 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 회원 클래스 다이어그램 : 정적 회원 객체 다이어그램 : 동적 하지만 이렇게 구현했을시에 문제점들이 있다. //MemberServiceImpl은 MemberRepository에도 의존하고 MemoryMemberRepository에도 의존함 public class MemberServiceImpl implements MemberService{ //이부분에서 DIP 위반, 실제 할당하는 부분이 구현체를 의존함 private final MemberRepository memberRepository = new MemoryMembe.. 2023. 7. 6. 이전 1 ··· 16 17 18 19 20 21 22 ··· 29 다음