0. ํ์ต ๋ชฉ์
- IoC (inversion of Control)์ด ๋ฌด์์ธ์ง ์ดํดํ๋ค.
1. IoC ๋?
๊ฐ์ฒด ์์ฑ๊ณผ ๊ด๋ฆฌ
์ ๋ํ ํต์ ๊ถ์ ๊ฐ๋ฐ์์์ ํ๋ ์์ํฌ๋ก ๋๊ธฐ๋ ๊ฒ์ ๋งํ๋ค.
(1) IoC ์ด์ ์ ์ ํต์ OOP ๋ฐฉ์ ๋ชจ๋ ๊ฐ ๊ฒฐํฉ
public class OrderController {
public void processOrder() {
// ์ง์ ๊ฐ์ฒด ์์ฑ - ๊ฐํ ๊ฒฐํฉ
PaymentService paymentService = new PaymentService();
EmailService emailService = new EmailService();
// ์ฌ์ฉ
paymentService.processPayment();
emailService.sendConfirmation();
}
}
(2) IoC ์ดํ ๋ชจ๋ ๊ฐ ๊ฒฐํฉ
@Controller
public class OrderController {
private final PaymentService paymentService;
private final EmailService emailService;
// Spring์ด ์๋์ผ๋ก ์์กด์ฑ ์ฃผ์
public OrderController(PaymentService paymentService,
EmailService emailService) {
this.paymentService = paymentService;
this.emailService = emailService;
}
public void processOrder() {
// ์ฃผ์
๋ฐ์ ๊ฐ์ฒด ์ฌ์ฉ
paymentService.processPayment();
emailService.sendConfirmation();
}
}
2. IoC์ ์ฅ์
- ๋ชจ๋ ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๋ค.
- ์ ์ง ๋ณด์์ฑ์ด ์ฌ๋ผ๊ฐ๋ค.
- ๋ชจ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ์ฌ๋ผ๊ฐ๋ค.
- ํ ์คํธ๊ฐ ์์ํด์ง๋ค.
(1) ๊ฒฐํฉ๋๋ ์ ๋ฎ์์ง๊น?
๊ฐ์ฒด์ ์์ฑ ์ฑ ์๊ณผ ์ฌ์ฉ ์ฑ ์์ ๋ถ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ ํต์ ์ธ OOP ๋ฐฉ์์์ ๋ชจ๋๊ฐ์ ๊ฒฐํฉ ํ ๋, ๊ฐ์ฒด A์์ ๊ฐ์ฒด B๋ฅผ ์ง์ ์์ฑํด์ ์ฌ์ฉํ๋ค. ํ์ง๋ง, IoC ์ดํ์๋ ์ธ๋ถ์์ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ๋ฐ์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด๋ ๊ฐ์ฒด A๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ๊ตฌ์ฒด์ ์ธ ์์ฑ ๋ฐฉ๋ฒ์ ์ ํ์๊ฐ ์์ด์ง๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ ๊ฐ์ฒด์ ์์ฑ ๋ฐฉ๋ฒ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ๊ฐ์ฒด A๊ฐ ์ํฅ ๋ฐ๋ ์ผ์ด ์์ด์ง๋ค.
(2) Test๊ฐ ์์ํด์ง๋ ์ด์
์ด ๋ํ ๊ฐ์ฒด ์์ฑ ์ฑ
์๊ณผ ์ฌ์ฉ ์ฑ
์์ ๋ถ๋ฆฌ ํ๊ธฐ์ ์๊ธด ํ๊ธํจ๊ณผ ์ด๋ค.
IoC๋ฅผ ์ ์ฉํ๋ฉด ๊ฐ์ฒด ์์ฑ ์ฑ
์๊ณผ ์ฌ์ฉ ์ฑ
์์ด ๋ถ๋ฆฌ๋๊ธฐ ๋๋ฌธ์, ์ค์ ๋ง๋ค์ด์ง ๊ฐ์ฒด๊ฐ ์๋, ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์ฃผ์
ํด์ ๊ธฐ๋ฅ ๋ณ ๋จ์ ํ
์คํธ๊ฐ ๊ฐ๋ฅํด์ง๋ค.
ํต์ฌ ์์ฝ
- IoC๋ ์ ์ด๊ถ์ ์ญ์ ์ ๋ปํ๋ฉฐ ๊ฐ์ฑ์ ์์ฑ๊ณผ ๊ด๋ฆฌ ์ ์ด๊ถ์ ๊ฐ๋ฐ์์์ ํ๋ ์์ํฌ๋ก ๋๊ธฐ๋ ๊ฒ์ ๋งํ๋ค.
- IoC๋ฅผ ์ ์ฉํ๋ฉด, ๊ฐ์ฒด๋ ์์ ์ด ์ฌ์ฉํ ํ ๊ฐ์ฒด์ ์์ฑ ๋ฐฉ๋ฒ์ ์ ํ์๊ฐ ์๊ธฐ์ ๊ทธ ๋ถ๋ถ์์ ๊ฒฐํฉ๋๊ฐ ์ค์ด๋ ๋ค. ์ด์ ๋ฐ๋ผ ์ ์ง๋ณด์์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ด ์ฌ๋ผ๊ฐ๋ค.
- ๋ํ ์์กด์ฑ์ ์ฃผ์ (DI) ๋ฐ์ ์ฌ์ฉํ๋ค๋ ํน์ฑ ๋๋ฌธ์ ๋จ์ ํ ์คํธ๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ค.
๋ถ๋ก
A. ๋ชจ๋ฅด๋ ๋จ์ด ์ ๋ฆฌ
๊ฒฐํฉ๋
: ๋ชจ๋ ๊ฐ์ ์ํธ ์์กด ์ ๋
๋ชจ๋ ๊ฐ์ ์ํธ ์์กด๋๊ฐ ๋์์๋ก, ํ ๋ชจ๋์ ๋ฏธ์ธํ ๋ณ๊ฒฝ์ฌํญ๋ ํ ๋ชจ๋์ ์๋์ ํฐ ์ํฅ์ ๋ผ์น๋ค.