
MemberService, MemberRepository라는 인터페이스로 만들며, 이에대한 구현은 MemberServiceImpl, MemoryMemberReopsitory 또는 DbMemberRepository 클래스로 한다.유료 강의이므로 소스코드의 일부는 생략하였다.
package hello.core.member;
public class Member {
private Long id;
private String name;
private Grade grade;
// Constructor
...
// Getter and Setter
...
}
public interface MemberRepository {
void save(Member member);
Member findById(Long memberId);
}
HashMap을 사용하여 정보를 저장한다.HashMap은 동시성 이슈가 발생할 수 있다. 이런 경우 ConcurrentHashMap 을 사용한다.import java.util.HashMap;
import java.util.Map;
public class MemoryMemberRepository implements MemberRepository{
private static final Map<Long, Member> store = new HashMap<>();
@Override
public void save(Member member) {...}
@Override
public Member findById(Long memberId) {...}
}
import java.util.List;
public interface MemberService {
void join(Member member);
Member findMember(Long memberId);
}
MemoryMemberRepository로 선택하여 생성한다.save(), 조회 메소드 findById()를 호출한다.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);
}
OrderServiceImpl, DiscountPolicy라는 인터페이스로 만들며, 이에대한 구현은 OrderServiceImpl, FixDiscountPolicy 또는 RateDiscountPolicy 클래스로 한다.discount() 메소드가 있다.public interface DiscountPolicy {
int discount(Member member, int price);
}
VIP라면 할인을 적용하고 아니라면 할인을 적용하지 않는다.public class FixDiscountPolicy implements DiscountPolicy {
private int discountFixAmount = 1000; //1000원 할인
@Override
public int discount(Member member, int price) {...}
}
public class Order {
private Long memberId;
private String itemName;
private int itemPrice;
private int discountPrice;
public int calculatePrice(){
return itemPrice - discountPrice;
}
// Constructor
...
/// Getter and Setter
..
}
createOrder() 메소드가 있다.public interface OrderService {
Order createOrder(Long memberId, String itemName, int itemPrice);
}
memberRepository에서 검색한다.discountPolicy에게 넘기며 위임한다.discountPolicy가 반환한 할인금액을 바탕으로 주문 Order 객체를 반환한다.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) {...}
}
출처: 인프런 스프링 핵심 원리 - 기본편 (김영한)
인프런 스프링 핵심 원리