클래스 순서도 

core 패키지 안에 3개 패키지가 있음 

 

 

discount 패키지

인터페이스

package core.discount;

import core.member.Member;

public interface DiscountPolicy { // 할인 정책
	int discount(Member member, int price); // 할인 금액을 리턴

}


구현 클래스 1000원 할인

package core.discount;

import core.member.Grade;
import core.member.Member;

public class FixDiscountPolicy implements DiscountPolicy{
	
	private int discountFixAmount = 1000; // 1000원 할인
	
	@Override
	public int discount(Member member, int price) {
		if(Grade.VIP == member.getGrade()){
			return discountFixAmount;
		}else {
			return 0;
		}
	
	}

}


구현 클래스 10% 할인
package core.discount;

import core.member.Grade;
import core.member.Member;

public class RateDiscountPolicy implements DiscountPolicy {
	
	private int discountPercent = 10; // 10% 할인
	
	@Override
	public int discount(Member member, int price) {
		if(member.getGrade() == Grade.VIP) {
			return price * discountPercent / 100;
		}else {
			return 0;
		}
		
	}

}

 

member 패키지

열거 enum

package core.member;

public enum Grade { // 회원 등급
	BASIC,
	VIP;
}


member DTO

package core.member;

public class Member {
	private Long id; // 회원 아이디
	private String name; // 회원 이름 
	private Grade grade; // 회원 등급
	
	
	public Member(Long id, String name, Grade grade) {
		super();
		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;
	}
	
	
	
}


인터페이스 1

package core.member;

public interface MemberRepository {
	void save(Member member);	// 회원 정보 저장
	Member findById(Long memberId); // 회원 정보 검색
}


구현 클래스 1

package 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) {
		// TODO Auto-generated method stub
		return store.get(memberId);
	}

}


인터페이스 2

package core.member;

public interface MemberService {
	void join(Member member);
	
	Member findMember(Long memberId);
}


구현 클래스 2

package core.member;

public class MemberServiceImpl implements MemberService {

	private MemberRepository memberRepository;
	
	
	
	
	public MemberServiceImpl(MemberRepository memberRepository) {
		super();
		this.memberRepository = memberRepository;
	}

	@Override
	public void join(Member member) {
		memberRepository.save(member);
		
	}

	@Override
	public Member findMember(Long memberId) {
		// TODO Auto-generated method stub
		return memberRepository.findById(memberId);
	}

}

 

 

order 패키지

order DTO

package core.order;

public class Order {
	private Long memberId;
	private String itemName; // 상품명
	private int itemPrice; // 상품 가격
	private int discountPrice;// 할인 가격
	
	public int calculatePrice() {// 상품 가격 계산
		return itemPrice - discountPrice;
	}

	public Order(Long memberId, String itemName, int itemPrice, int discountPrice) {
		super();
		this.memberId = memberId;
		this.itemName = itemName;
		this.itemPrice = itemPrice;
		this.discountPrice = 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 core.order;

public interface OrderService {
	Order createOrder(Long memberId, String itemName, int itemPrice);
}


구현 클래스

package core.order;

import core.discount.DiscountPolicy;
import core.member.Member;
import core.member.MemberRepository;

public class OrderServiceImpl implements OrderService {
	
	private MemberRepository memberRepository; // 회원 정보 
	private DiscountPolicy discountPolicy;
	
	
	
	
	public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
		super();
		this.memberRepository = memberRepository;
		this.discountPolicy = discountPolicy;
	}




	@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);
	}

}

 

 

core 패키지

셋팅 ( 나중에 스프링에서 설정 해줌 ) 

package core;

// 셋팅

import core.discount.DiscountPolicy;
import core.discount.RateDiscountPolicy;
import core.member.MemberRepository;
import core.member.MemberServiceImpl;
import core.member.MemoryMemberRepository;
import core.order.OrderServiceImpl;

public class AppConfig {
	
	public DiscountPolicy discountPolicy() {
		return new RateDiscountPolicy();
	}
	
	public MemberRepository memberRepository() {
		return new MemoryMemberRepository();
	}
	
	public MemberServiceImpl memberService() {
		return new MemberServiceImpl(memberRepository());
	}
	
	public OrderServiceImpl orderService() {
		return new OrderServiceImpl(memberRepository(), discountPolicy());
	}
	
}


실행

package core;

import core.member.Grade;
import core.member.Member;
import core.order.Order;

public class MemberApp {

	public static void main(String[] args) {
		
		AppConfig app = new AppConfig();
		
		Member member = new Member(1L, "홍길수", Grade.VIP);
		app.memberService().join(member); // 회원 등록
		
		// 회원 검색
		Member findMember = app.memberService().findMember(1L);
		
		System.out.println(findMember.getName());
	
		Order order = app.orderService().createOrder(1L, "item1", 9000);
		System.out.println("할인 금액 :"+order.getDiscountPrice());
		System.out.println("지불액:"+order.calculatePrice());
	}
	

}
<결과>
홍길수
할인 금액 :900
지불액:8100

+ Recent posts