OrderApp class를 먼저 만들어 준다.
// OrderApp class
package hello.core;
import hello.core.member.Grade;
import hello.core.member.Member;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.order.Order;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
public class OrderApp {
public static void main(String[] args) {
MemberService memberService = new MemberServiceImpl();
OrderService orderService = new OrderServiceImpl();
Long memberId = 1L;
Member member = new Member(memberId, "memberA", Grade.VIP);
memberService.join(member);
Order order = orderService.createOrder(memberId, "itemA", 10000);
// toString을 하게되면 order 패키지에 있는 toString이 출력된다.(.toString()을 생략)
System.out.println("order = " + order);
// System.out.println("order.calculatePrice = " + order.calculatePrice());
}
}
order package - OrderApp class
package hello.core.order;
public class Order {
private Long memberId;
private String itemName;
private int itemPrice;
private int discountPrice;
public Order(Long memberId, String itemName, int itemPrice, int discountPrice) {
this.memberId = memberId;
this.itemName = itemName;
this.itemPrice = itemPrice;
this.discountPrice = discountPrice;
}
public int calculatePrice() {
return itemPrice - discountPrice;
}
public Long getMemberId() {
return memberId;
}
public void setMemberId(Long memberId) {
this.memberId = memberId;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public int getItemPrice() {
return itemPrice;
}
public void setItemPrice(int itemPrice) {
this.itemPrice = itemPrice;
}
public int getDiscountPrice() {
return discountPrice;
}
public void setDiscountPrice(int discountPrice) {
this.discountPrice = discountPrice;
}
@Override
// toString()이 부분
public String toString() {
return "Order{" +
"memberId=" + memberId +
", itemName='" + itemName + '\'' +
", itemPrice=" + itemPrice +
", discountPrice=" + discountPrice +
'}';
}
}
Junit로 그대로 test 폴더에 옮겨와보자.
// order package - OrderServiceTest class
package hello.core.order;
import hello.core.member.Grade;
import hello.core.member.Member;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
public class OrderServiceTest {
MemberService memberService = new MemberServiceImpl();
OrderService orderService = new OrderServiceImpl();
@Test
void createOrder() {
Long memberId = 1L;
Member member = new Member(memberId, "memberA", Grade.VIP);
memberService.join(member);
Order order = orderService.createOrder(memberId, "itemA", 10000);
Assertions.assertThat(order.getDiscountPrice()).isEqualTo(1000);
}
}
돌려보면 아래와 같다. 순수하게 자바 코드로 각각 테스트를 해보았다.
코어 어플리케이션 같은 경우에는 스프링 프레임워크 띄우고 해야해서 오래 걸릴 수 밖에 없다.
CoreApplication class
package hello.core;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class CoreApplicationTests {
@Test
void contextLoads() {
}
}
클라이언트가 주문 서비스에 주문생성을 하고 주문 서비스가 회원을 조회하고 할인 정책해서 결과물을 클라이언트에 반환한다.
(일단 지금까지는 할인 정책이라는 인터페이스와 정액할인 정책이라는 구현체를 잘 분리를 해주었다.)
이 상태에서 정률 할인 정책으로 깔끔하게 바꿀 수 있는가?
나중에 객체 지향 원리 적용을 할 때 알아보자.
<출처 김영한: 스프링 핵심 원리 - 기본편 >
스프링 핵심 원리 - 기본편 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...
www.inflearn.com
'Spring > SpringCore' 카테고리의 다른 글
스프링 핵심 원리 이해1 - 주문과 할인 도메인 개발 (0) | 2022.03.24 |
---|---|
스프링 핵심 원리 이해1 - 주문과 할인 도메인 설계 (0) | 2022.03.24 |
스프링 핵심 원리 이해1 - 회원 도메인 실행과 테스트 (0) | 2022.03.24 |
스프링 핵심 원리 이해1 - 회원 도메인 설계 (0) | 2022.03.24 |
스프링 핵심 원리 이해1 - 비즈니스 요구사항 설계 (0) | 2022.03.24 |