스프링 기본 sec2. 예제

고라니·2021년 9월 3일
0

스프링기본

목록 보기
2/5

참고: 프로젝트 환경설정을 편리하게 하려고 스프링 부트를 사용하였고,
이번 섹션은 스프링 없는 순수한 자바로만 개발을 진행하는 섹션이다.

간단 비즈니스 요구사항+설계

회원 도메인

회원 - (가입,조회가능) , 등급 존재( 회원 등급에 따라 할인 정책을 적용할 수 있다. )
주문과 할인 정책 (할인 정책은 변경 가능성이 높다.

주문 도메인

출처 인프런 스프링 핵심원리 기본 -갓영한님
사용자가 주문하면 주문 서비스는 회원 저장소에서 회원 조회 후 할인 정책 역할에 넘겨서 할인적용(금액)을 반환해온다. 그러면 그것을 가지고 주문 객체를 생성하게 되는 방식이다.

(이후 다음 섹션에서는 메모리 회원 저장소 구현체를 DB 회원 저장소로 갈아끼우고, 정액 할인 정책을 정률 할인 정책으로 갈아끼우는 과정에서 스프링 객체지향 개발에 대해서 공부할 예정)

코드는 매우 간단하니 pdf를 참고.

추가

MemberService, OrderService 를 인터페이스로 만들고 구현체로 둔 이유? (Impl붙여서)

  • '이상적으로 모든 설계에 인터페이스를 부여' 을 지킨 것이다.
    강의에서는 이상적으로 역할과 구현을 분리하는 것에 초점을 맞추었기 때문에 이런 부분들도 분리함. 실무에서는 꼭 그럴 필요 없다.

Order를 생성할 때, Order 클래스의 생성자를 이용하는 것이 아니라, OrderService의 createOrder로 생성하는 이유? (Member는 생성자로 생성하는데 반하여)
static factory 패턴인데, 일반적으로 많이 사용하는 패턴이다.

  • 장점
    -이름이 있으므로 생성자에 비해 가독성이 좋다.
    -호출할 때마다 새로운 객체를 생성할 필요가 없다.
    -하위 자료형 객체를 반환할 수 있다. (리턴하는 객체의 타입을 유연하게 지정할 수 있다.)
  • 단점
    -정적 팩토리 메서드만 있는 클래스라면, 생성자가 없으므로 하위 클래스를 못 만든다.
    -정적 팩토리 메서드는 다른 정적 메서드와 잘 구분되지 않는다. (문서만으로 확인하기 어려울 수 있다.)

따라서 Member 클래스처럼 매우 생성이 단순한 경우에는 생성자를 그냥 사용하는게 더 좋다. (간단한 곳에는 간단한 무기로!)

테스트코드의 중요성
애플리케이션이 작을 때는 상관이 없지만, 점점 규모가 커질 수록 버그가 발생할 확률이 심각하게 증가
→ 개발자가 눈으로 직접 테스트 하는 시간을 자동화해서, 전체 애플리케이션 개발 시간을 장기적으로 더 줄이고, 버그도 줄인다!

profile
공부를 열심히 하는 학부생

0개의 댓글