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) {...}
}
출처: 인프런 스프링 핵심 원리 - 기본편 (김영한)
인프런 스프링 핵심 원리