비즈니스 요구사항과 설계
인터페이스를 만들고 구현체를 얼마든지 갈아끼울 수 있도록 설계한다. 지금은 스프링없는 순수한 자바로만 개발을 진행한다. 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지
write-read.tistory.com
DiscountPolicy
package hello.core.discount; import hello.core.member.Member; public interface DiscountPolicy { /** * @return 할인 대상 금액 */ int discount(Member member , int price); }
FixDiscountPolicy
package hello.core.discount; import hello.core.member.Grade; import hello.core.member.Member; public class FixDiscountPolicy implements DiscountPolicy{ private int discountFixAmount = 1000; // 1000원 할인 @Override public int discount(Member member, int price) { if(member.getGrade() == Grade.VIP){ // enum타입은 == 을 쓰는게 맞다. return discountFixAmount; } else{ return 0; } } }
Order
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 public String toString() { return "order{" + "memberId=" + memberId + ", itemName='" + itemName + '\'' + ", itemPrice=" + itemPrice + ", discountPrice=" + discountPrice + '}'; } }
OrderService
package hello.core.order; public interface OrderService { Order createOrder(Long memberId , String itemName , int itemPrice); }
OrderServiceImpl
package hello.core.order; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.member.Member; import hello.core.member.MemberRepository; import hello.core.member.MemoryMemberRepository; public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository = new MemoryMemberRepository(); private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discountPrice = discountPolicy.discount(member , itemPrice); return new Order(memberId , itemName , itemPrice , discountPrice); } }
OrderApp (순수 자바 코드로 테스트)
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(1L , "memberA" , Grade.VIP); memberService.join(member); Order itemA = orderService.createOrder(memberId, "itemA", 10000); System.out.println("Order =" + itemA.toString()); System.out.println("Order =" + itemA.calculatePrice()); } }
OrderServiceTest
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 주문_생성(){ 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); } }
스프링 핵심 원리 - 기본편 - 인프런
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 초급 프레임워크 및 라이브러리 웹 개발 서버 개발 Back-End Spring 객체지향 온
www.inflearn.com
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.
주문과 할인 도메인 개발 및 테스트
비즈니스 요구사항과 설계
인터페이스를 만들고 구현체를 얼마든지 갈아끼울 수 있도록 설계한다. 지금은 스프링없는 순수한 자바로만 개발을 진행한다. 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지
write-read.tistory.com
DiscountPolicy
package hello.core.discount; import hello.core.member.Member; public interface DiscountPolicy { /** * @return 할인 대상 금액 */ int discount(Member member , int price); }
FixDiscountPolicy
package hello.core.discount; import hello.core.member.Grade; import hello.core.member.Member; public class FixDiscountPolicy implements DiscountPolicy{ private int discountFixAmount = 1000; // 1000원 할인 @Override public int discount(Member member, int price) { if(member.getGrade() == Grade.VIP){ // enum타입은 == 을 쓰는게 맞다. return discountFixAmount; } else{ return 0; } } }
Order
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 public String toString() { return "order{" + "memberId=" + memberId + ", itemName='" + itemName + '\'' + ", itemPrice=" + itemPrice + ", discountPrice=" + discountPrice + '}'; } }
OrderService
package hello.core.order; public interface OrderService { Order createOrder(Long memberId , String itemName , int itemPrice); }
OrderServiceImpl
package hello.core.order; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.member.Member; import hello.core.member.MemberRepository; import hello.core.member.MemoryMemberRepository; public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository = new MemoryMemberRepository(); private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discountPrice = discountPolicy.discount(member , itemPrice); return new Order(memberId , itemName , itemPrice , discountPrice); } }
OrderApp (순수 자바 코드로 테스트)
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(1L , "memberA" , Grade.VIP); memberService.join(member); Order itemA = orderService.createOrder(memberId, "itemA", 10000); System.out.println("Order =" + itemA.toString()); System.out.println("Order =" + itemA.calculatePrice()); } }
OrderServiceTest
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 주문_생성(){ 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); } }
스프링 핵심 원리 - 기본편 - 인프런
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 초급 프레임워크 및 라이브러리 웹 개발 서버 개발 Back-End Spring 객체지향 온
www.inflearn.com
'스프링 핵심 원리 > 스프링 핵심 원리 이해' 카테고리의 다른 글