BackEnd/Spring

[Spring] 예제 만들기

팽팽 2022. 7. 22. 22:44

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

 

- Java 11

- IDE: IntelliJ

 

* 스프링 없는 순수 자바로만 개발 진행

- 스프링 부트 스타터를 이용하여 스프링 프로젝트 생성

https://start.spring.io/

 

 

- 비즈니스 요구사항과 설계


< 회원> 

1)  회원 도메인 설계

- 회원은 가입(join)과 조회(find) 가능

- 회원은 일반(basic)과 vip 두가지 등급

- 회원 데이터는 자체 DB 구축 or  외부 시스템 연동

- 역할(interface) 과 구현(implement)으로 분리하여 설계

 

 

2) 회원 도메인 개발

member package

- 회원 등급

- 회원 객체

 

 

3) 회원 저장소

- MemberRepository 인터페이스

: 언제든지 구현체 바꿀 수 있도록 역할이랑 구현을 잘 나눠놓자

 

 

-  MemoryMemberRepository 구현 객체

 

4) 회원 서비스(가입, 조회)

- MemberService 인터페이스

 

- MemberServiceImpl 구현 객체

: 어쨌거나 MemoryMemberRepository를 수동으로 바꿔줘야하므로 역할과 구현이 잘 분리되어있진 않음

 

5) 회원 도메인 실행과 테스트

- JUnit Test

: 위 방법대신 @Test를 이용함


<주문과 할인>

 

1) 주문과 할인 도메인 설계

클래스 다이어그램

 

역할과 구현을 분리해서 설계했기 때문에 구현체를 언제든지 교체할 수 있음!

 

 

2) 주문과 할인 도메인 개발

- DiscountPolicy 할인 정책 인터페이스

 

- FixDiscountPolicy 할인정책 구현체

: 회원 등급이 vip면 고정 1000원 할인

 

 

- 주문 엔티티

객체 출력시 toString()이 출력되게끔함

 

 

- OrderService 주문 서비스 인터페이스

:주문 생성

- OrderServiceImpl 주문 서비스 구현체

3) 주문과 할인 정책 테스트

- class 실행

- JUnit 단위 테스트

4)  새로운 할인 정책 개발

- vip면 1000원 고정 할인이 아니라 10% 정률 할인으로 바꾸기

- 인터페이스랑 구현체를 잘 분리해뒀으니 정률 할인하는 구현체 class만 새로 생성하자

- RateDiscountPolicy implement

- 테스트 작성


문제점!!

 

- 할인 정책을 변경하려면 클라이언트 코드(orderserviceImpl) 을 고쳐야함

- DIP 미준수 : DiscountPolicy 인터페이스랑 implement 모두 의존하고 있음

- OCP 미준수: 기능을 확장해서 변경하면 클라이언트 코드에 영향을 줌