[spring기본]2. 스프링 핵심 원리 이해 1
비즈니스 요구사항과 설계
-
회원 클래스 다이어그램
-
먼저 회원 Member 엔티티를 만든다
- 인터페이스를 상속받아 회원 저장소 구현체를 만들어준다. save와 findById 메소드를 오버라이딩한다.
- 회원 서비스 인터페이스를 선언한다. 회원 가입, 회원 조회 메소드를 명시한다.
- 회원 서비스 구현체를 생성한다. 역시 오버라이딩을 통해 상세 로직을 재정의한다.
테스트코드 작성
- 회원 가입 시 생성한 회원과, findMember로 조회한 회원이 일치하는지 assertThat을 통해 검증한다.
- 그러나 위와 같은 개발 방법은 의존관계가 인터페이스 뿐만 아니라 구현(MemoryMenberRepository)까지 모두 의존한다는 단점이 있어 DIP를 준수하지 못한다.
주문과 할인 도메인 설계
- 다음 요구사항을 따르는 주문과 할인 도메인을 설계하자
- 역할과 구현을 분리하여 자유롭게 구현체를 변경할 수 있는 구조다.
- 서비스의 변경 없이 할인정책 등 구현체를 갈아끼울 수 있다.
- 할인 정책 인터페이스와 고정할인 구현체다. 할인 금액을 리턴한다.
- 주문 서비스 인터페이스와 주문 서비스 구현체다
- Junit을 통해 getDiscountPrice로 얻은 할인 금액이 정액 할인금액과 일치하는지 확인한다.