์์ค ์ฝ๋์ ๋ณต์ก๋๋ฅผ ์ค์ด๊ณ , ํจ์จ์ ๋์ด๊ณ , ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด Spring์์๋ ๋ค์์ 3๊ฐ์ง๋ฅผ ์ด์ฉํ๋ค.
- DI
- IoC Container
- AOP
์์กด์ฑ ์ฃผ์
์ด๋ผ๋ ๋ง ๊ทธ๋๋ก, ๊ฐ์ฒด ๊ฐ ์ฐ๊ฒฐ์ ์ํด ํ ๊ฐ์ฒด ๋ด์์ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ด ์๋ ์ฃผ์
ํ๋ ๋ฐฉ์
์ผ๋ก ์ด์ฉํ๋ ๊ธฐ๋ฒ
๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ๊ฒฐํฉ๋ ฅ์ด ๋์ ์ฝ๋๋ผ๊ณ ๋ณธ๋ค.
class A {
B1 b1;
public A() {
b1 = new B1();
}
}
class B1 {
}
class B2 {
}
๋ง์ฝ B1์ ๋์ค์ ๊ฐ๋ฐํ B2๋ก ๊ต์ฒดํ๊ณ ์ ํ๋ค๋ฉด B1 ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๋ชจ๋ ์์ค ์ฝ๋๋ฅผ ์์ ํด์ฃผ์ด์ผ ํ๋ค.
๋ฐ๋ผ์ ๊ฒฐํฉ๋ ฅ์ด ๋์ ์ฝ๋๋ ๋ค์์ ๋ฌธ์ ๋ฅผ ๋ฐ์์ํจ๋ค๊ณ ๋ณผ ์ ์๋ค.
- ์์ค ์ฝ๋์ ์ผ๋ถ๋ฅผ ์์ ํ๊ณ ์ ํ ๋, ์ฐ๊ด๋ ๋ชจ๋ ๋ถ๋ถ์ ์์ ํด์ผ ํ๋ค. ์ด๋ ๋ณต์กํ๊ณ ์ํํ ์ผ์ด ๋ ๊ฒ์ด๋ค.
- ํด๋น ๊ฐ์ฒด๋ฅผ ํ์๋ก ํ๋ ๋ชจ๋ ํด๋์ค ๋ด์์ new๋ฅผ ํตํด ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ฒ ๋๋ค๋ฉด, ๋๋ฌด ๋ง์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ฒ ๋จ
DI๋ฅผ ์ด์ฉํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
class A {
B b;
public A(B b) {
this.b = b;
}
}
interface B {
}
class B1 implements B {
}
class B2 implements B {
}
์ด์ B1์ B2๋ก ๊ต์ฒดํ๊ณ ์ ํ๋ค ํด๋ A๋ฅผ ์์ ํ ํ์๊ฐ ์๊ฒ ๋์๋ค.
๋ฐ๋ผ์, DI๋ ์์์ ๋ช ์ํ ๋ฌธ์ ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ํด๊ฒฐํ๋ค.
- ์์ค ์ฝ๋์ ์ผ๋ถ(B1)๋ฅผ ์์ ํ๊ณ ์ ํ๋ฉด ํด๋น ๋ถ๋ถ๋ง ์์ ํ๋ฉด ๋๋ค.
- B ๊ด๋ จ ์ธ์คํด์ค๋ ํ ๋ฒ๋ง ์์ฑ๋์ด ์ฌ๋ฌ ๊ฐ์ฒด์ ์ฃผ์ ๋์ด ์ฌ์ฉ๋ ์ ์๋ค. (์ฑ๊ธํค ๊ฐ๋ฅ)