EEALL@ONCE
๐ฑ์๋น์ค ๋ถ๋ถ ๋ก์ง ๋ฐ๊พธ๊ธฐ ( OCP, DIP ์ ์ฉ ๋ฒ์ ) ๋ณธ๋ฌธ
๐ฑ์๋น์ค ๋ถ๋ถ ๋ก์ง ๋ฐ๊พธ๊ธฐ ( OCP, DIP ์ ์ฉ ๋ฒ์ )
์ฌ์ฃ์์ค 2023. 7. 11. 23:241. ์ด์ ๊ธ ๋ฌธ์ ์
ํด๋ผ์ด์ธํธ ์ฝ๋์ธ OrderServiceImpl์ด ์ธํฐํ์ด์ค๋ค ๋ฟ๋ง์ด ์๋๋ผ, ๊ตฌ์ฒด ํด๋์ค ( FixDiscountPolicy,RateDiscountPolicy)์๋ ์์กดํ๋ค. ์ฝ๊ฒ ๋งํ์๋ฉด, ํด๋น ์ฝ๋์ ๊ตฌ์ฒด ํด๋์ค ์ฝ๋๊ฐ ๋ค์ด๊ฐ๋ค๋ ๊ฒ!!
2. ํด๋ผ์ด์ธํธ๊ฐ ์ธํฐํ์ด์ค์๋ง ์์กดํ๋๋ก ๋ง๋ค์.
public class OrderServiceImpl implements OrderService{
์์
private DiscountPolicy discountPolicy;
์ธํฐํ์ด์ค๋ง ์ ์ธํด์ค๋ค.
๊ทผ๋ฐ ๊ทธ๋ผ ๊ตฌํ์ฒด๊ฐ ์๋๋ฐ ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ์คํํ ์ ์์๊น?
3.์ญํ ๋ถ๋ฆฌ ํ ์ฃผ์
์ธํฐํ์ด์ค๋ ์ธ๋ฌผ์ด๊ณ
๊ตฌํ์ฒด๋ ๋ฐฐ์ฐ๋ผ๊ณ ๊ฐ์ ํ์.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ทน ์๊ฐ๋ผ๊ณ ํ๋ค๋ฉด,
์ฐ๊ทน ์๊ฐ๋ ์๋๋ฆฌ์ค๋ฅผ ์ฐ๋ฉด์ ์ธ๋ฌผ์ ๋ง๋ค๊ณ ์ฌ๊ฑด์ ๋ง๋ ๋ค.
ํ์ง๋ง, ๋๊ฐ ์ด ์ธ๋ฌผ์ ์ฃผ์ธ๊ณต์ ๋งก์์ง๋ ๋ชจ๋ฅด๋ฉฐ, ๊ฒฐ์ ๊ถํ์ด ์๋ค!
์ด ๊ฒฐ์ ๊ถํ์ ๊ฐ์ง ๊ฒ์ด ๋ฐ๋ก AppConfig๋ค! AppConfig๋ฅผ ์บ์คํ
๋๋ ํฐ๋ผ๊ณ ์๊ฐํ์!
4. ๊ทธ๋์ ์ด๋ป๊ฒ AppConfig๋ ์บ์คํ ๋๋ ํฐ๋ก์ ์ผํ๋๊ฐ!?
public class AppConfig {
public OrderService orderService(){
return new OrderServiceImpl(new MemoryMemberRepository(),new FixDiscountPolicy());
}
}
AppConfig์์ ์ฌ์ฉํ MemoryMemberRepository์ FixDiscountPolicy ( ์ฆ ๋ฐฐ์ฐ๋ฅผ ์บ์คํ ํด์ค๋ค!)
public class OrderServiceImpl implements OrderService{
private final DiscountPolicy discountPolicy;
private final MemberRepository memberRepository;
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.discountPolicy = discountPolicy;
this.memberRepository = memberRepository;
}
}
๊ทธ๋ฌ๋ฉด, OderServiceImpl์ด๋ผ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ทน ์๊ฐ๋ ์ด๋ค ๋ฐฐ์ฐ๊ฐ ์บ์คํ ๋์๋์ง ๋ชจ๋ฅด๊ณ ,
๊ทน ์ค ์ธ๋ฌผ๋ง ์ ๊ฒฝ์ฐ๋ฉด ๋๋ค!
4. main๊ณผtest์๋ ์ ์ฉ!
๐ฅMain
public class OrderApp {
public static void main(String[] args) {
AppConfig appConfig = new AppConfig();
MemberService memberService = appConfig.memberService();
OrderService orderService = appConfig.orderService();
long memberId = 1L;
Member member = new Member(memberId, "memberA", Grade.VIP);
memberService.join(member);
Order order = orderService.createOrder(memberId, "itemA", 10000);
System.out.println("order = " + order);
}
}
main์์๋ appConfig์ ํตํด์ ๋ฐฐ์ฐ๋ฅผ ์บ์คํ ํด์ค๋ค.
AppConfig appConfig = new AppConfig();
MemberService memberService = appConfig.memberService();
OrderService orderService = appConfig.orderService();
๐ฅTest
@BeforeEach
public void beforeEach(){
AppConfig appConfig= new AppConfig();
memberService=appConfig.memberService();
}
test๊ฐ ๋๊ธฐ ์ ์ ๋ฌด์กฐ๊ฑด ๋จผ์ ์คํํ๋๊ฑฐ (@BeforeEach)์์ AppConfig ์ค์ ํด์ค๋ค.
'Spring๐ฑ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ฑ App Config -> ์ฌ์ฉ ์์ญ / ๊ตฌ์ฑ ์์ญ (0) | 2023.07.23 |
---|---|
๐ฑ AppConfig ๋ฆฌํฉํฐ๋ง (0) | 2023.07.21 |
๐ฑ์๋น์ค ๋ถ๋ถ ๋ก์ง ๋ฐ๊พธ๊ธฐ ( OCP, DIP ๋ฌด์ ๋ฒ์ ) (0) | 2023.07.03 |
๐ฑ๋ง์์ ์ ํ์ง ์์ ์ฌ์ฅ๊ณผ Spring์ ์ฌ์ฉํด์ ์ ์ฐํ๊ฒ ์ฝ๋๋ฅผ ์งํํ๋ ๊ฐ๋ฐ์ (0) | 2023.06.23 |
๐ฑ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น (SOLID) (0) | 2023.06.23 |