public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(new MemoryMemberRepository());
}
public OrderService orderService() {
return new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy());
}
}
public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
public DiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
위 다이어그램에 필요한 역할
1. 주문 서비스 역할
2. 회원 저장소 역할
3-1. 할인 정책 역할
3-2. 회원 서비스 역할
총 4개의 역할로 구성되어 있다. 이 역할들이 AppConfig 내에 잘 드러나도록 작성하는 것이 이후 관리하기 쉽다.
Before에는 회원 서비스 역할과 주문 서비스 역할만이 드러났고 다른 역할들은 찾기가 힘들다. 그렇기 때문에 할인정책 역할과 회원 저장소 역할은 무엇을 구현했는지 한눈에 보기 힘들다.
After에는 4개의 역할 모두 한눈에 보기 쉽게 작성이 되어있는 것을 확인할 수 있다. 또한, 각 역할마다 무엇을 구현하는지 정확하게 알 수 있다.
자바에선 new를 통해 새로운 객체(인스턴스)를 생성하는데 다수의 역할에 해당 인스턴스가 필요하다고 매번 만드는 것이 아니라 하나 만든 것을 같이 사용하는 것이 옳다.
하지만 지금 배운 부분에서는 결국 두개의 다른 MemoryMemberRepository 객체를 사용하게 되는데... 추후 강의에서 설명이 나오니 간략하게 내용 추가할 예정(2022-05-07).
Before에서 주문 서비스 역할과 회원 서비스 역할은 모두 메모리 회원 저장소 객체를 만들어서 전해준다. 같은 일을 하는 객체를 new를 통해 두번 만든 것을 확인할 수 있다.
After에서 회원 저장소 역할을 만들어 MemoryMemberRepository객체를 생성하여 주입해준다. 결국 역할과 구현이 잘 드러내며 중복된 부분을 없앨 수 있게 되었다.