์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ์ฌ ์ค๊ณํ ๊ฒ์ ์๋ก ๋ค์ด๋ณด๋ฉด,
์์ฒ๋ผ ๋น์ ํ ์ ์๋ค.
ํ์ง๋ง ์ด์ ๊น์ง ์ฝ๋๋ฅผ ๊ตฌํํ๋ ๋ฐฉ์์ OrderServiceImpl์ด๋ผ๋ ๊ตฌํ์ฒด(๋์นดํ๋ฆฌ์ค)์์ ์ง์ FixDiscountPolicy ํน์ RateDiscountPolicy(์ ๋ง์์จ)๋ฅผ ๋ถ๋ฅด๊ณ ์๋ค.
๋์นดํ๋ฆฌ์ค(๊ตฌํ์ฒด)๋ ๊ทธ์ ๋ณธ์ธ์ ์ญํ ์ธ ๋ก๋ฏธ์ค ์ญ(์ธํฐํ์ด์ค)๋ง ์ ์ํํ๋ฉด ๋๋๋ฐ, ์๋์ธ ์ ๋ง์์จ(๊ตฌํ์ฒด)๊น์ง ๋ณธ์ธ์ด ์ ํ๊ณ ์๋ค..
๋ฐ๋ผ์, ๊ณต์ฐ ๊ธฐํ์๊ฐ ํ์ํ๋ค. ๊ณต์ฐ ๊ธฐํ์๊ฐ ์์์ ์๋ง์ ์ญํ ์ ๊ฐ์ง ๋ฐฐ์ฐ๋ค์ ์ง์ ํด์ค ๊ฒ์ด๋ค.
< AppConfig >
public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(new MemoryMemberRepository());
}
}
AppConfig ์ memberService ๋ฉ์๋์์ MemberServiceImpl ์ด ์์ฑ๋๋๋ฐ, ๊ทธ๋ ๋งค๊ฐ๋ณ์๋ก MemoryMemberRepository ๋ฅผ ๋ฃ๋๋ค.
< MemberServiceImpl >
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository;
// ์์ฑ์๋ฅผ ํตํด์ memberRepository์ ๋ฌด์์ด ๋ค์ด๊ฐ์ง ๊ฒฐ์
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
๊ทธ๋ฌ๋ฉด MemberServiceImpl ํด๋์ค์ ์์ฑ์์ MemoryMemberRepository๊ฐ ๋ค์ด์ค๊ฒ ๋๋ค.
OrderServiceImpl๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
๊ตฌํ์ฒด๋ฅผ ๋ฌด์์ผ๋ก ํ ๊ฒ์ธ์ง๋ AppConfig์์ ๊ฒฐ์ ํ๋ค.
< AppConfig >
public class AppConfig {
public OrderService orderService() {
return new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy());
}
}
< OrderServiceImpl >
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy; // final์ ๊ฐ์ ๋ฌด์กฐ๊ฑด ํ ๋นํด์ผํจ, ๊ตฌํ์ฒด์ ์์กดํ์ง ์๊ณ ์ญํ (์ธํฐํ์ด์ค)์๋ง ์์กดํ๋ ์ค
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
์, ์ด์ ํ์ธํด๋ณด์!!
์ด์ MemberServiceImpl์ OrderServiceImpl์ ์์ฑ, MemoryMemberRepository์ FixDiscountPolicy ์์ฑ์ AppCofig ์์ ํ๋ค.
๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฐ๊ฒฐํ๋ ์ญํ ๊ณผ, ์คํํ๋ ์ญํ ์ด ๋ช ํํ ๋ถ๋ฆฌ๋์๋ค.