일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Notice
Recent Posts
Recent Comments
Link
Tags
- 프로그래머스 공 던지기 게임
- 숨어있는 숫자의 덧셈 (1) 자바
- spring boot 배너 설정
- 소인수분해 구하는 공식
- 자바 소인수분해
- 프로그래머스 문자열 정렬하기(1)
- 비전공자 정보처리기사 필기
- 배열 순환
- 펙토리얼
- 스프링 부트 배너 설정
- 비전공자 정처기 필기
- 배열 순환 문제 공식
- 정처기 필기 벼락치기
- 경우의 수 자바
- 오블완
- cursor 설치
- 피그마 썸네일
- 스프링부트 의존성 설정
- 정보처리기사 필기
- 접속 url 출력
- 배열 순환 자바
- cursor 우클릭 메뉴
- 자바 합성수 찾기
- 정보처리기사 필기 벼락치기
- 티스토리챌린지
- string과 stringbuilder 성능 최적화
- 왓챠피디아 클론 코딩
- 스프링 부트 프로젝트 세팅
- 프로그래머스
- 자바 팩토리얼
Archives
- Today
- Total
여름 언덕에서 배운 것
스프링 핵심 원리 이해1 - 회원,주문,할인 도메인 본문
회원등급
package hrd.core.member;
public enum Grade {
Basic,
Vip
}
회원
package hrd.core.member;
public class Member {
private Long id;
private String name;
private Grade grade;
public Member(Long id, String name, Grade grade) {
this.id = id;
this.name = name;
this.grade = grade;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
인터페이스 -repository, service
package hrd.core.member;
public interface MemberRepository {
void save(Member member);
Member findById(Long MemberId);
}
package hrd.core.member;
public interface MemberService {
void join(Member member);
Member findMember(Long memberId);
}
구현체 - repository 구현체,serviceImp
package hrd.core.member;
import java.util.HashMap;
import java.util.Map;
public class MemoryMemberRepository implements MemberRepository{
private static Map<Long,Member> store = new HashMap<>();
@Override
public void save(Member member) {
store.put(member.getId(),member);
}
@Override
public Member findById(Long memberId) {
return store.get(memberId);
}
}
package hrd.core.member;
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository = new MemoryMemberRepository();
@Override
public void join(Member member) {
memberRepository.save(member);
}
@Override
public Member findMember(Long memberId) {
return memberRepository.findById(memberId);
}
}
잘 실행되는지 확인 _ memberApp
package hrd.core;
import hrd.core.member.Grade;
import hrd.core.member.Member;
import hrd.core.member.MemberService;
import hrd.core.member.MemberServiceImpl;
public class MemberApp {
public static void main(String[] args) {
MemberService memberService = new MemberServiceImpl();
Member member = new Member(1L,"memberA", Grade.Vip);
memberService.join(member);
Member findMember = memberService.findMember(1L);
System.out.println("new member = " + member.getName());
System.out.println("find Member = " + findMember.getName());
}
}
join 메서드 테스트 _ J unit 테스트
package hrd.core.member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
public class MemberServiceTest {
MemberService memberService = new MemberServiceImpl();
@Test
void join(){
//given 주어졌을 때
Member member = new Member(1L,"memberA",Grade.Vip);
//when 이렇게 하면
memberService.join(member);
Member findMember = memberService.findMember(1L);
//then(검증) 이렇게 된다.
Assertions.assertThat(member).isEqualTo(findMember);
}
}
Order
주문이 끝나면 만들어지는 객체
package hrd.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;
}
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 +
'}';
}
}
package hrd.core.order;
public interface OrderService {
Order createOrder(Long memberId, String itemName, int itemPrice);
}
package hrd.core.order;
import hrd.core.discount.DiscountPolicy;
import hrd.core.discount.FixDiscountPolicy;
import hrd.core.member.Member;
import hrd.core.member.MemberRepository;
import hrd.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);
}
}
package hrd.core.order;
import hrd.core.member.Grade;
import hrd.core.member.Member;
import hrd.core.member.MemberService;
import hrd.core.member.MemberServiceImpl;
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);
System.out.println("order = " + order);
System.out.println("order.calculatePrice = " + order.calculatePrice());
}
}
할인정책 (인터페이스,구현체)
package hrd.core.discount;
import hrd.core.member.Member;
public interface DiscountPolicy {
/**
*
* @param member
* @param price
* @return 할인대상금액
*/
int discount(Member member,int price);
}
package hrd.core.discount;
import hrd.core.member.Grade;
import hrd.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;
}
}
728x90
'가랑비에 옷 젖는 줄 모른다 💻 > 스프링' 카테고리의 다른 글
[스프링입문]섹션5-회원 관리 예제 - 웹 MVC 개발 (0) | 2023.09.26 |
---|---|
[스프링입문]섹션4-스프링 빈과 의존관계 (0) | 2023.09.26 |
[스프링입문]섹션3- 회원 관리 예제 - 백엔드 개발 (0) | 2023.09.25 |
[스프링입문]섹션2- 스프링 웹 개발 기초 (0) | 2023.09.25 |
[스프링 입문] 섹션 1 (0) | 2023.09.24 |