์ ์ด์ ์ญ์ (IoC) & ์์กด์ฑ ์ฃผ์ (DI)
์ ์ด์ ์ญ์
์ ์ด์ ์ญ์ (IoC): ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ์ ์ง์ ์ ์ดํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์์ ๊ด๋ฆฌํ๋ ๊ฒ
public class OrderServiceImpl implements OrderService {
// private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
private final DiscountPolicy discountPolicy = new RateDiscountPolicy();
}
๊ธฐ์กด์๋ ํด๋ผ์ด์ธํธ ๊ตฌํ ๊ฐ์ฒด๊ฐ ์ค์ค๋ก ํ์ํ ์๋ฒ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์์ฑ, ์ฐ๊ฒฐ ์คํํ๋ค. -> ๊ตฌํ ๊ฐ์ฒด๊ฐ ์ค์ค๋ก ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ์ ์กฐ์ ํจ
ํ๋ ์ด๋ ๊ฒ ํ ๊ฒฝ์ฐ 1. ํ ์ธ ์ ์ฑ ์ ๋ณ๊ฒฝํ ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ์ง์ ์์ ํด์ผํ๊ณ (OCP ์๋ฐ), 2. ์ถ์ํ๋ฟ๋ง์ด ์๋๋ผ ๊ตฌํ ๊ฐ์ฒด์๋ ์์กดํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.(DIP ์๋ฐ)
// Appconfig.java
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 FixDiscountPolicy();
}
}
// OrderServiceImpl.java
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy
discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
...
}
ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ์ AppConfig(์ธ๋ถ)๊ฐ ๊ฐ์ ธ๊ฐ๊ณ OrderServiceImpl์ ์์ ์ ๋ก์ง๋ง ์คํํ๊ฒ ๋๋ค
์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ๋์์ ํ์ํ ๊ตฌํ ๊ฐ์ฒด๋ AppConfig๊ฐ ์์ฑํ๊ณ , ์์ฑํ ๊ฐ์ฒด ์ธ์คํด์ค์ ์ฐธ์กฐ(๋ ํผ๋ฐ์ค)๋ฅผ ์์ฑ์๋ฅผ ํตํด์ ์ฃผ์ (์ฐ๊ฒฐ)ํด์ค๋ค.
OrderServiceImpl
-> MemoryMemberRepository
, FixDiscountPolicy
OrderServiceImpl
์
์ฅ์์ ์์ฑ์๋ฅผ ํตํด ์ด๋ค ๊ตฌํ ๊ฐ์ฒด๊ฐ ๋ค์ด์ฌ์ง(์ฃผ์
๋ ์ง)๋ ์ ์ ์๋ค.
OrderServiceImpl
์ ์์ฑ์๋ฅผ ํตํด์ ์ด๋ค ๊ตฌํ ๊ฐ์ฒด์ ์ฃผ์
ํ ์ง๋ ์ค์ง ์ธ๋ถ( AppConfig )์์๊ฒฐ์ ํ๋ค.
OrderServiceImpl
์ ์ด์ ๋ถํฐ ์คํ์๋ง ์ง์คํ๋ฉด ๋๋ค.
์์กด์ฑ ์ฃผ์ (DI)
์ ์ ์ธ ํด๋์ค ์์กด๊ด๊ณ
ํด๋์ค๊ฐ ์ฌ์ฉํ๋ import ์ฝ๋๋ง ๋ณด๊ณ ํ์ ํ ์ ์๋ค
๋์ ์ธ ๊ฐ์ฒด ์ธ์คํด์ค ์์กด ๊ด๊ณ
์ ํ๋ฆฌ์ผ์ด์ ์คํ ์์ ์ ์ค์ ์์ฑ๋ ๊ฐ์ฒด ์ธ์คํด์ค์ ์ฐธ์กฐ๊ฐ ์ฐ๊ฒฐ๋ ์์กด ๊ด๊ณ
์์กด์ฑ ์ฃผ์ (DI): ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์์ (๋ฐํ์)์ ์ธ๋ถ์์ ์ค์ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํด์, ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ค์ ์์กด๊ด๊ณ๊ฐ ์ฐ๊ฒฐ ๋๋ ๊ฒ
IoC์ปจํ ์ด๋, DI์ปจํ ์ด๋
AppConfig์ฒ๋ผ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ฉด์ ์์กด๊ด๊ณ๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ
์ต๊ทผ์๋ ์์กด๊ด๊ณ ์ฃผ์ ์ ์ด์ ์ ๋ง์ถฐ ์ฃผ๋ก DI์ปจํ ์ด๋๋ผ๊ณ ํ๋ค.
'โญ Personal_Study > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์์กด๊ด๊ณ ์๋ ์ฃผ์ (1) | 2023.01.09 |
---|---|
ComponentScan (0) | 2023.01.07 |
Singleton Container (0) | 2023.01.06 |
์คํ๋ง ์ปจํ ์ด๋ & Bean ์กฐํ (0) | 2023.01.05 |
SOLID (์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น) (1) | 2022.12.31 |
๋๊ธ