/* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค.
๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */
์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์
์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข
www.inflearn.com
์๋ก์ด ๊ตฌ์กฐ์ ํ ์ธ ์ ์ฑ ์ ์ฉ
1. ์๊ตฌ์ฌํญ ํ์ธ
โพ ์๊ตฌ์ฌํญ : ์ ์ก ํ ์ธ ์ ์ฑ ์ ์ ๋ฅ ํ ์ธ ์ ์ฑ ์ผ๋ก ๋ณ๊ฒฝ(FixDiscountPolicy โ RateDiscountPolicy)
โพ AppConfig์ ๋ฑ์ฅ์ผ๋ก ํฌ๊ฒ ์ฌ์ฉ์์ญ๊ณผ ๊ตฌ์ฑ์์ญ์ผ๋ก ๋ถ๋ฆฌ๋์๊ธฐ ๋๋ฌธ์ ๊ตฌ์ฑ์์ญ์์ RateDiscountPolicy๋ก ๋ณ๊ฒฝํด๋ ์ฌ์ฉ์์ญ ์ชฝ์ ์ ํ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
2. ์ฝ๋ ์์ฑ
appConfig
public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public DiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
}
}
โพ discountPolicy() ๋ถ๋ถ๋ง ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๋ค!
์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น ์ ์ฉ
1. SRP(๋จ์ผ ์ฑ ์ ์์น)
ํ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค.
โพ ๋ฌธ์ ์ : ์ฐ๋ฆฌ๊ฐ ์ฒ์ ๋ง๋ ํด๋ผ์ด์ธํธ ๊ฐ์ฒด๋ ๋ค์ํ ์ฑ ์์ ๊ฐ์ง๊ณ ์์์(๊ฐ์ฒด ์์ฑ, ์ฐ๊ฒฐ, ์คํ)
โพ ํด๊ฒฐ : SRP ๋จ์ผ ์ฑ ์ ์์น์ ๋ฐ๋ฅด๊ธฐ ์ํด ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์
โ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฐ๊ฒฐํ๋ ์ฑ ์ : AppConfig | ์คํํ๋ ์ฑ ์ : ํด๋ผ์ด์ธํธ ๊ฐ์ฒด
2. DIP(์์กด๊ด๊ณ ์ญ์ ์์น)
ํ๋ก๊ทธ๋๋จธ๋ ์ถ์ํ์ ์์กดํด์ผ์ง, ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค.
โพ ๋ฌธ์ ์ : ์๋ก์ด ํ ์ธ ์ ์ฑ ์ ๋ง๋ค๊ณ ์ ์ฉํ๋ ค๊ณ ํ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ ํจ๊ป ๋ณ๊ฒฝํด์ผ ํ๋ค. ์๋ํ๋ฉด `OrderServiceImpl` ์ด `FixDiscountPolicy`๋ผ๋ ๊ตฌ์ฒดํ ํด๋์ค์ ์์กดํ๊ธฐ ๋๋ฌธ.
โพ ํด๊ฒฐ : ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ `DiscountPolicy`๋ผ๋ ์ถ์ํ ์ธํฐํ์ด์ค์๋ง ์์กดํ๋๋ก ์ฝ๋ ๋ณ๊ฒฝ
โ AppConfig๊ฐ `FixDiscountPolicy` ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ๋์ ์์ฑํด์ ํด๋ผ์ด์ธํธ ์ฝ๋์ ์์กด๊ด๊ณ ์ฃผ์
3. OCP(๊ฐ๋ฐฉ-ํ์ ์์น)
์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค ์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
โพ ๋ฌธ์ ์ : ์์ ๊ฐ์ ๋ฌธ์ ์ ๋ฐ์
โพ ํด๊ฒฐ : AppConfig๋ฅผ ๋ง๋ค๋ฉด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์์ญ๊ณผ ๊ตฌ์ฑ์์ญ์ผ๋ก ๋๋
โ AppConfig๊ฐ ์์กด๊ด๊ณ๋ฅผ `FixDiscountPolicy`์์ `RateDiscountPolicy`๋ก ๋ณ๊ฒฝํด์ ํด๋ผ์ด์ธํธ ์ฝ๋์ ์ฃผ์ ํ๋ฏ๋ก ํด๋ผ์ด์ธํธ ์ฝ๋๋ ๋ณ๊ฒฝํ์ง ์์ ๋์
โ ์ํํธ์จ์ด ์์๋ฅผ ์๋กญ๊ฒ ํ์ฅํด๋ ์ฌ์ฉ ์์ญ์ ๋ณ๊ฒฝ์ ๋ซํ์๊ฒ ๋จ!