티스토리 뷰
서론
- Spring의 기능을 쓰지 않고 순수한 Java로 프로젝트를 설계하기
- 순수 Java로 설계한 프로젝트에서 서비스를 확장해보기
- 이때, 객체지향의 원칙을 잘 준수 했는지 확인해보기
1. 프로젝트 생성
2. 비즈니스 요구사항
회원
- 회원을 가입하고 조회할 수 있다.
- 회원은 일반과 VIP 두 가지 등급이 있다.
- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)
주문과 할인 정책
- 회원은 상품을 주문할 수 있다.
- 회원 등급에 따라 할인 정책을 적용할 수 있다.
- 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.)
- 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정)
3. 회원 도메인 설계
- 요구사항 회원을 가입하고 조회할 수 있다.
- 회원은 일반과 VIP 두 가지 등급이 있다.
- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)
회원 도메인 협력 관계
회원 객체 다이어그램
4. 회원 도메인 테스트 코드 작성
실행시 잘 작동하는것을 확인할 수 있다. 하지만 이 코드는 OCP의 원칙도, DIP의 원칙도 지키고 있지 않다.
MemberServiceImpl이 인터페이스(MemberRepository)와 구현체(MemoryMemberRepository)모두에 의존하기 때문이다. (DIP 위반)
일단 Spring의 기능을 안쓰고 순수 자바로 개발할 시, 객체지향의 원칙을 지키기 어렵다는 문제가 있다는것을 확인 했다.
4. 주문과 할인 도메인 설계
- 회원은 상품을 주문할 수 있다.
- 회원 등급에 따라 할인 정책을 적용할 수 있다.
- 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.)
- 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정)
주문 도메인 협력, 역할, 책임
주문 도메인 클래스 다이어그램
주문 도메인 객체 다이어그램
- 역할들의 협력관계를 그대로 재사용하므로 주문 서비스를 변경하지 않아도 된다.
5. 주문과 할인 도메인 테스트 코드 작성
꿀팁
- Interface의 구현체가 딱 1개 있을 경우 보통 뒤에 Impl을 붙인다. (OrderService -> OrderServiceImpl)
- 스프링이나 컨테이너의 도움없이 순수하게 자바코드로만 테스트하는것을 단위테스트라고 한다. 스프링을 키고, 데이터베이스에 접근하는 등의 복잡한 과정없이 진행하므로 속도가 훨씬 빠르다. 따라서 단위테스트를 잘 사용할 줄 알아야한다.
'Web 개발' 카테고리의 다른 글
[Web] Spring 핵심 원리 6 - 관심사의 분리(AppConfig) (0) | 2022.01.09 |
---|---|
[Web] Spring 핵심 원리 5 - 순수 Java로 예제 프로젝트 설계하기 (2) (0) | 2022.01.07 |
[Web] Spring 핵심 원리 3 - 좋은 객체 지향 설계의 5가지 원칙 (SOLID) (0) | 2021.12.18 |
[Web] Spring 핵심 원리 2 - 객체 지향 프로그램과 Spring (0) | 2021.12.18 |
[Web] Spring 핵심 원리 1 - Spring은 뭘까? Spring의 핵심? (0) | 2021.12.16 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- G5
- BFS
- DFS
- 문자열
- 자바
- Spring Boot
- 구현
- 우선순위큐
- 객체지향
- 다익스트라
- 코딩새내기
- 현꾸라지
- g4
- PriorityQueue
- 리액트
- SWEA
- S3
- map
- 백준
- 백트래킹
- Spring
- laugh4mile
- 리액트 네이티브
- react native
- 시뮬레이션
- java
- S2
- 알고리즘
- 그리디
- react
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함