스프링 핵심 원리2 이해1 - 예제 만들기

junkyu lee·2022년 5월 25일
0

Spring

목록 보기
6/6

1. 세팅

순수 자바로 세팅
https://start.spring.io


2. 요구사항

  • 인터페이스를 만들고 구현체를 언제든지 갈아끼울 수 있도록 설계

  • 저장소를 인터페이스, 이후 구현체로 구현


회원 클래스 다이어그램

member

  • Member : id, name, grade

Interface

  • MemberRepository
역할
  save(Member) : Member 객체를 저장소에 저장
  findById(MemberId) : Id에 맞는 Member 객체를 저장소에서 가져오는 기능
  • MemberService
역할
 join(Member) : Member 객체를 저장소에 저장
 findMember(memberId) : Id에 맞는 Member 객체를 저장소에서 가져오는 기능

구현체

  • MemoryMemberRepository(MemberRepository)
 구현
   store : HashMap<>()
   save : store.put()
   findById : store.get()
  • MemberServiceImpl
구현 
  Repository : MemoryMemberRepository()
  join : MemoryMemberRepository.save()
  findMember : MemoryMemberRepository.findById()

order

  • Order : memberId, itemName, itemPrice, discountPrice

Interface

  • DiscountPolicy

    역할 
    discount : member객체마다 알맞은 할인 금액을 선정한다.
  • OrderService

    역할
    createOrder : memberId, itemName, itemPrice를 입력받아 order 객체를 생성한다.

구현체

  • FixDiscountPolicy
구현
  discount : member의 grade가 VIP인 경우 discountFixAmount = 1000 의 고정된 할인 금액을 반환
  • OrderServiceImpl
구현 
  createOrder : MemberServiceImpl에서 memberId로 member의 grade를 가져오고FixDiscountPolicy에서 고정된 할인금액을 반환받아 최종 order 객체를 생성한다. 

Test

given

  • 임의의 VIP유저 객체 생성 후 저장소에 저장
    //given
    Long memberId = 1L;
    Member member = new Member(memberId, "memberA", Grade.VIP);
    memberService.join(member);

when

  • Member객체의 Id값으로 임의의 Order 객체 생성
    //when
    Order order = orderService.createOrder(memberId, "itemA", 10000);

then

  • Order 객체의 discountPrice가 1000과 동일한지 검증 진행
    //then
    Assertions.assertThat(1000).isEqualTo(order.getDiscountPrice());
profile
가끔 기록하는 velog

0개의 댓글