참고: 프로젝트 환경설정을 편리하게 하려고 스프링 부트를 사용하였고,
이번 섹션은 스프링 없는 순수한 자바로만 개발을 진행하는 섹션이다.
회원 - (가입,조회가능) , 등급 존재( 회원 등급에 따라 할인 정책을 적용할 수 있다. )
주문과 할인 정책 (할인 정책은 변경 가능성이 높다.
출처 인프런 스프링 핵심원리 기본 -갓영한님
사용자가 주문하면 주문 서비스는 회원 저장소에서 회원 조회 후 할인 정책 역할에 넘겨서 할인적용(금액)을 반환해온다. 그러면 그것을 가지고 주문 객체를 생성하게 되는 방식이다.
(이후 다음 섹션에서는 메모리 회원 저장소 구현체를 DB 회원 저장소로 갈아끼우고, 정액 할인 정책을 정률 할인 정책으로 갈아끼우는 과정에서 스프링 객체지향 개발에 대해서 공부할 예정)
코드는 매우 간단하니 pdf를 참고.
MemberService, OrderService 를 인터페이스로 만들고 구현체로 둔 이유? (Impl붙여서)
Order를 생성할 때, Order 클래스의 생성자를 이용하는 것이 아니라, OrderService의 createOrder로 생성하는 이유? (Member는 생성자로 생성하는데 반하여)
static factory 패턴인데, 일반적으로 많이 사용하는 패턴이다.
따라서 Member 클래스처럼 매우 생성이 단순한 경우에는 생성자를 그냥 사용하는게 더 좋다. (간단한 곳에는 간단한 무기로!)
테스트코드의 중요성
애플리케이션이 작을 때는 상관이 없지만, 점점 규모가 커질 수록 버그가 발생할 확률이 심각하게 증가
→ 개발자가 눈으로 직접 테스트 하는 시간을 자동화해서, 전체 애플리케이션 개발 시간을 장기적으로 더 줄이고, 버그도 줄인다!