메모
~~Impl : 구현체가 하나일 때 관례상 사용
alt + insert : generate
file -> setting -> keymap 검색 -> 찾고싶은 단축키 검색
F2: 오류난 곳으로 커서 이동
enum은 비교 시 ==이 맞음
객체 출력하면 기본적으로 객체 내부의 toString()이 출력됨
primative type (long 등) 은 null을 할당할 수 없음 Long은 가능
psvm 치고 엔터 : public static void main(String[] args) {}
soutv 치고 엔터: System.out.println("변수: " + 변수) // 위 코드의 변수 중 선택할 수 있음
프로젝트 생성
순수 자바로만 프로젝트를 만들어보고 SOLID 원칙을 만족하는지 확인해보자
비즈니스 요구사항과 설계
회원 등급이 있고 등급에 따른 할인 서비스를 도입할 것이다.
다만 할인 내용은 변경될 수 있으므로 인터페이스로 설계해야한다.
회원 도메인 설계 & 개발 & 테스트
회원 도메인도 구축 방식이 확정되지 않았으므로 인터페이스로 설계한다.
회원 등급 Grade는 enum으로 만든다.
회원 객체 Member를 만든다.
회원 저장소를 인터페이스로 만들고 상속받는 임시 구현체인 MemoryMemberRepository를 만든다.
회원 서비스 인터페이스와 구현체 MemberServiceImpl을 만든다.
hello.core에 MemberApp을 만들고 System.out.으로 테스트 해본다.
다만 이는 좋은 방식이 아니므로 JUnit 테스트를 진행한다.
이것은 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점이 있다.
OCP와 DIP에 위배한다.
주문과 할인 도메인 설계 & 개발 & 테스트
회원은 상품을 주문할 수 있고 등급에 따라 할인 정책이 적용될 수 있다.
VIP는 1000원 고정 할인을 적용해달라. 그렇지만 변경될 수 있다.
클라이언트 역할 -> 주문 서비스 역할 -> 회원 저장소 역할 and 할인 정책 역할
할인 정책 역할 인터페이스 DiscountPolicy와 구현체 FixDiscountPolicy를 생성한다.
주문 엔티티 Order를 만들고 Order를 반환하는 주문 서비스 인터페이스 OrderService, 구현체 OrderServiceImpl 생성한다.
회원 도메인과 마찬가지로 JUnit 테스트를 진행한다.
'Spring boot' 카테고리의 다른 글
[기본] 스프링 컨테이너와 스프링 빈 (1) | 2021.08.11 |
---|---|
[기본] 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 (0) | 2021.08.06 |
[기본] 객체 지향 설계와 스프링 (0) | 2021.08.02 |
[입문] AOP (0) | 2021.07.30 |
[입문] spring DB 접근 기술 (1) | 2021.07.27 |