ํํ๋ค IoC์ DI(Dependency Injection: ์์กด์ฑ ์ฃผ์ )์ ํท๊ฐ๋ คํ๊ฑฐ๋, ๋์ผ์ํ๊ณ ๋ ํ๋ค.
ํ์ง๋ง ์ฌ์ค IoC์ DI๋ ๋ค๋ฅธ ๊ฐ๋ ์ด๋ค. ์ ๋ IoC == DI๊ฐ ์๋๋ค! (DI โ IoC ๋ผ๋ฉด ๋ชฐ๋ผ๋)
IoC๋ ํ๋ก๊ทธ๋จ ์ ์ด๊ถ์ ์ญ์ ์ํค๋ ๊ฐ๋ ์ด๊ณ ,
DI๋ ํด๋น ๊ฐ๋ ์ ๊ตฌํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋์์ธ ํจํด ์ค ํ๋๋ก, ์ด๋ฆ ๊ทธ๋๋ก ๊ฐ์ฒด์ ์์กด๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ์ฃผ์ ์ํค๋ ํจํด์ ๋งํ๋ค.
IOC (Inversion of Control) : ์ ์ด์ ์ญ์
* ํ ๋ฆฌ์ฐ๋ ์์น์ "Don't call usd, We'll call you."
: ๋ฐฐ์ฐ๋ค(๊ฐ์ฒด)์๊ฒ ์ํ์ฌ์์ "ํ์ํ๋ฉด ์ฐ๋ฆฌ๊ฐ ๋จผ์ ์ฐ๋ฝํ ํ ๋, ๋จผ์ ์ฐ๋ฝํ์ง ๋ง์ธ์"
๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ(๊ฐ์ฒด์ ์์ฑ, ์ด๊ธฐํ, ์๋ฉธ, ๋ฉ์๋ ํธ์ถ ๋ฑ..)๋ฅผ ํด๋ผ์ด์ธํธ ๊ตฌํ ๊ฐ์ฒด(๊ฐ๋ฐ์)๊ฐ ์ง์ ๊ด๋ฆฌํ๋ค..
๊ทธ๋ฌ๋, ์คํ๋ง์ ์ฌ์ฉํ๋ฉด Controller, Service๊ฐ์ ๊ฐ์ฒด ๋์์ ์ฐ๋ฆฌ๊ฐ ์ง์ ๊ตฌํ์ ํด๋, ํด๋น ๊ฐ์ฒด๋ค์ด ์ด๋ ์์ ์ ํธ์ถ๋ ์ง๋ ์ ๊ฒฝ์ฐ์ง ์๋๋ค. ๋จ์ง ํ๋ ์์ํฌ๊ฐ ์๊ตฌํ๋๋๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด, ํ๋ ์์ํฌ๊ฐ ํด๋น ๊ฐ์ฒด๋ค์ ๊ฐ์ ธ๋ค๊ฐ ์์ฑํ๊ณ , ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ , ์๋ฉธ์ํจ๋ค. => ํ๋ก๊ทธ๋จ์ ์ ์ด๊ถ์ด ์ญ์ ๋จ!
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ดํ๋ฆฌ์ผ์ด์
: ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด๋ฏธ ๋ดํฌ๋ ๊ฐ์ฒด๋ค์ ์ ์ฌ์ ์์ ํธ์ถํ์ฌ ๊ฐ์ ธ๋ค ์ธ ๋ฟ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์ด ํ๋ฆ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ด์ด์ฃผ์ง ์๋๋ค.
- ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ์ดํ๋ฆฌ์ผ์ด์
: ์ดํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ์์ฑํ ๊ฐ์ฒด๋ค์ ํ๋ ์์ํฌ๊ฐ ํ์ํ ์์ ์ ๊ฐ์ ธ๋ค๊ฐ ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ํ๋ฏ๋ก ํ๋ก๊ทธ๋จ์ ์ ์ด๊ถ์ด ํ๋ ์์ํฌ๋ก ์ญ์ ๋๋ค.
ex) ํ ์คํธ Junit ํ๋ ์์ํฌ ์ฌ์ฉ ์
- ๊ฐ๋ฐ์ : ๊ฐ๊ฐ์ ํ ์คํธ ๋ฉ์๋ ์์ฑ
- Junit ํ๋ ์์ํฌ : ๋ฉ์๋๋ค์ ๋ํ ์ ์ด
=> ๊ฐ๋ฐ์๋ค์ @Test ๋ฑ ์ด๋ ธํ ์ด์ ์ ๋ถ์ด๊ธฐ๋ง ํ๋ฉด Junit ํ๋ ์ ์ํฌ๊ฐ ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. ์ ์ด๊ถ์ด Junit์ชฝ์ผ๋ก ์ญ์ ๋์๋ค.
IOC ์ฅ์
- ํ๋ก๊ทธ๋จ์ ์งํ ํ๋ฆ๊ณผ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ๋ถ๋ฆฌ์ํฌ ์ ์๋ค.
- ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๋ค.
- ๊ตฌํ์ฒด ์ฌ์ด์ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๋ค.
- ๊ฐ์ฒด ๊ฐ ์์กด์ฑ์ด ๋ฎ์์ง๋ค.
DI (Dependency Injection) : ์์กด์ฑ ์ฃผ์
* ์์กด์ฑ : A๊ฐ B์ ์์กดํ๋ค๋ฉด, B๊ฐ ๋ณ๊ฒฝ ์์ A์๋ ์ํฅ์ ๋ฏธ์น๋ค.
(๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์๋ ๊ฐ์ฒด๋ค๋ผ๋ฆฌ ํ๋ ฅํ๊ธฐ ์ํด์๋ ๊ฒฐ๊ตญ ์๋ก์๊ฒ ์์กดํ ์ ๋ฐ์ ์๋ค.)
public class A {
private B b = new B();
// ์ด A ํด๋์ค๋ ์ธ๋ถ์ Bํด๋์ค๋ฅผ ์์กดํ๋ ํด๋์ค์ด๋ค.
// ๋ง์ฝ, ์ธ๋ถ์ Bํด๋์ค์์ ๋ณ๊ฒฝ์ด ์ผ์ด๋๊ฒ๋๋ฉด Aํด๋์ค์๋ ์ํฅ์ ๋ฏธ์น๋ค.
}
public class A {
private B b; // A๊ฐ B์ ์์กดํ๋ค
public A(B b) {
this.b = b;
}
// ์ด ์ฝ๋๋ ์ฌ์ ํ B๊ฐ ๋ณ๊ฒฝ๋๋ฉด A์ ๋ด์ฉ๋ ๋ณ๊ฒฝ๋์ง๋ง,
// ์์กด ๋์์ ์ง์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์ B๋ก๋ถํฐ ์ฃผ์
๋ฐ๋๋ค.
}
์์กด์ฑ ์ฃผ์ ์ ์ธ๊ฐ์ง ์คํ์ผ
- ์์ฑ์ ์ฃผ์ (Constructor Injection) **์คํ๋ง์์ ๊ถ์ฅํ๋ ๋ฐฉ์!
public class A {
private B b;
public A(B b) {
this.b = b;
}
}
- Setter ์ฃผ์ (Setter Injection)
public class A {
private B b;
public void setB(B b) {
this.b = b;
}
}
- ์ธํฐํ์ด์ค ์ฃผ์ (Interface Injection)
public interface BInjection {
void inject(B b);
}
public A implements BInjection {
private B b;
@Override
public void inject(B b) {
this.b = b;
}
}
DI ์ฅ์
- ์์กด์ฑ์ด ์ค์ด๋ ๋ค. (๋ณ๊ฒฝ์ ๋ ์ทจ์ฝํด์ง๋ค.)
- ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋จ์ ํ ์คํธ๊ฐ ์ฌ์์ง๋ค.
- ๊ฐ๋ ์ฑ์ด ๋์์ง๋ค.
- ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋ค.
'๋ฐฑ์๋(Back-End) ๊ฐ๋ฐ > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TOMCAT] ์๋ฒ ํฌํธ ์ถฉ๋๋ก ์ธํด ์๋ฒ ์์์ด ์๋ ๊ฒฝ์ฐ (0) | 2025.03.01 |
---|---|
[Spring] Entity? DTO? VO? (1) | 2025.02.27 |
[Spring] Spring Framework(์คํ๋ง ํ๋ ์ ์ํฌ)์ STS(Spring Tool Suite) (0) | 2025.01.19 |
[Spring] DI์ AOP์ ๊ฐ๋ (0) | 2024.12.09 |
[Spring] DispatcherServlet ๋ฐ Spring MVC์ ๋์ ์์ (0) | 2024.12.09 |