๐ก ์์กด์ฑ ์ฃผ์ ์ด๋?
IoC๋ผ๋ ์ฉ์ด๋ ๋งค์ฐ ๋์จํ๊ฒ ์ ์๋ผ์ ํญ ๋๊ฒ ์ฌ์ฉ๋๋ ์ฉ์ด์ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ช๋ช ์ฌ๋์ ์ ์์ผ๋ก ์คํ๋ง์ด ์ ๊ณตํ๋ IoC๋ฐฉ์์ ํต์ฌ์ ์ง์ด์ฃผ๋ ๋ช ํํ ๋๋ฌ๋๋ ์ด๋ฆ์ ๋ง๋๋๋ฐ,
์ด๋ฅผ ์์กด๊ด๊ณ ์ฃผ์ (Dependency Injection)์ด๋ผ๊ณ ํฉ๋๋ค.
์คํ๋ง IoC ๊ธฐ๋ฅ์ ๋ํ์ ์ธ ๋์์๋ฆฌ๋ ์ฃผ๋ก ์์กด๊ด๊ณ ์ฃผ์ ์ด๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค.
๋ฐ๋ผ์ IoC์ปจํ ์ด๋๋ฅผ ์ง๊ธ์ ์์กด๊ด๊ณ ์ฃผ์ ์ปจํ ์ด๋, DI ์ปจํ ์ด๋๋ผ ๋ ๋ง์ด ๋ถ๋ฆฌ๊ณ ์์ต๋๋ค.
โ๏ธ ์์กด๊ด๊ณ๋?
๋๊ฐ ๋๊ตฌ์๊ฒ ์์กดํ๋ ๊ด๊ณ์ ์๋ค.
UML๋ชจ๋ธ์์๋ ๋ ํด๋์ค์ ์์กด๊ด๊ณ๋ฅผ ์๋์ ๊ฐ์ด ํํํ๋ค.
์์กดํ๋ค๋ ๊ฑด ์์กด๋์, B๊ฐ A์ ์ํฅ์ ๋ฏธ์น๋ค๋ ๋ป์ธ๋ฐ,
B์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋๋ฉด ๊ทธ ์ํฅ์ด A๋ก ์ ๋ฌ๋๋ค๋ ๊ฒ์ด๋ค.
๋ค์ ๋งํด, ์์กด๊ด๊ณ์๋ ๋ฐฉํฅ์ฑ์ด ์กด์ฌํ๋ค.
๋ฐฉํฅ์ฑ ์กด์ฌ๋, A๊ฐ B์ ์์กดํ๊ณ ์์ง๋ง, B๋ A์ ์์กดํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
์ด์ ์ ๋ค๋ค๋ UserDao ์์กด๊ด๊ณ๋ฅผ ๋ณด๋ฉด,
UserDao๊ฐ ConnectionMaker์ ์์กดํ๊ณ ์๋ ํํ์ด๋ค.
๋ฐ๋ผ์ ConnectionMaker ์ธํฐํ์ด์ค๊ฐ ๋ณํ๋ฉด, ๊ทธ ์ํฅ์ UserDao๊ฐ ์ง์ ์ ์ผ๋ก ๋ฐ๋๋ค.
ํ์ง๋ง DConnectionMaker ์ด ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ฐ๋์ด๋ UserDao์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
์๋ํ๋ฉด DConnectionMaker๋ ๋จ์ง ConnectionMaker๋ฅผ ์์ํ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๊ฒ ์ธํฐํ์ด์ค์ ๋ํด์๋ง ์์กด๊ด๊ณ๋ฅผ ๋ง๋ค์ด๋๋ฉด ์ธํฐํ์ด์ค ๊ตฌํ ํด๋์ค์์ ๊ด๊ณ์ ์ํฅ์ ๋ ๋ฐ๋๋ค.
์ด๊ฒ์ UserDao์ ConnectionMaker๋ฅผ DconnectionMaker๋ก ์์กด์ฑ ์ฃผ์ ํ๋ค๊ณ ํ๋ ๊ฒ์ด๋ค.
์ด์ฒ๋ผ ์์กด๊ด๊ณ๋ ์ค๊ณ ๋ชจ๋ธ์ ๊ด์ ์์ ์ด์ผ๊ธฐํ๋ ๊ฒ์ธ๋ฐ,
์ด๋ฐ ์์กด๊ด๊ณ ๋ง๊ณ , ๋ฐํ์ ์์ ์ค๋ธ์ ํธ ์ฌ์ด์์ ๋ง๋ค์ด์ง๋ ๋ฐํ์ ์์กด๊ด๊ณ๋ ์๋ค.
โ๏ธ ๋ฐํ์ ์์กด๊ด๊ณ๋?
์ค๋ธ์ ํธ ์์กด๊ด๊ณ๋ผ ๋ถ๋ฆฌ๋ฉฐ, ์ค๊ณ ์์ ์ ์์กด๊ด๊ณ๊ฐ ์ค์ฒดํ๋๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, UserDao์ ์ค๋ธ์ ํธ๊ฐ ๋ฐํ์ ์์ ์ฌ์ฉํ ์ค๋ธ์ ํธ๊ฐ ์ด๋ค ํด๋์ค๋ก ๋ง๋ ๊ฒ์ธ์ง ์ ์ ์๋ค.
์ฌ์ ์ ์ด๋ค ํด๋์ค์ ์ค๋ธ์ ํธ๋ฅผ ์ธ์ง ๋ฏธ๋ฆฌ ์ ํด๋์ ์ ์์ง๋ง, ์ฝ๋ ์์ ๋๋ฌ๋์ง ์๋๋ค.
์ด๋ ํ๋ก๊ทธ๋จ์ด ์์๋๊ณ UserDao ์ค๋ธ์ ํธ๊ฐ ๋ง๋ค์ด์ง ํ ๋ฐํ์ ์์ ์์กด๊ด๊ณ๋ฅผ ๋งบ๋ ๋์์
์์กด ์ค๋ธ์ ํธ๋ผ ๋งํ๋๋ฐ,
์์กด๊ด๊ณ ์ฃผ์ ์ ์ด๋ ๊ฒ ๊ตฌ์ฒด์ ์ธ ์์กด ์ค๋ธ์ ํธ์ ๊ทธ๊ฒ์ ์ฌ์ฉํ ์ฃผ์ฒด,
๋ณดํต ํด๋ผ์ด์ธํธ๋ผ๊ณ ๋ถ๋ฅด๋ ์ค๋ธ์ ํธ๋ฅผ ๋ฐํ์ ์์ ์ฐ๊ฒฐํด์ฃผ๋ ์์ ์ ๋งํ๋ค.
โ๏ธ ์์กด๊ด๊ณ ์กฐ๊ฑด
- ํด๋์ค ๋ชจ๋ธ์ด๋ ์ฝ๋์๋ ๋ฐํ์ ์์ ์ ์์กด๊ด๊ณ๊ฐ ๋๋ฌ๋์ง ์๋๋ค.
- ์ธํฐํ์ด์ค์๋ง ์์กดํ๊ณ ์์ด์ผ ํ๋ค.
- ๋ฐํ์ ์์ ์ ์์กด๊ด๊ณ๋ ์ปจํ ์ด๋๋ ํฉํ ๋ฆฌ ๊ฐ์ ์ 3์ ์กด์ฌ๊ฐ ๊ฒฐ์ ํ๋ค.
- ์์กด๊ด๊ณ๋ ์ค๋ธ์ ํธ์ ๋ํ ๋ ํผ๋ฐ์ค๋ฅผ ์ธ๋ถ์์ ์ ๊ณตํด์ค์ผ ํ๋ค.
์ 3์ ์กด์ฌ : IoC ์ปจํ ์ด๋, ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ, ๋น ํฉํ ๋ฆฌ
โ๏ธ ์์กด๊ด๊ณ ๊ฒ์(DL) ์ด๋?
์คํ๋ง์๋ ์์กด๊ด๊ณ ์ฃผ์ ๋ฟ ์๋๋ผ ์์กด๊ด๊ณ ๊ฒ์๋ ์๋ค.
์์กด๊ด๊ณ๋ฅผ ๋งบ๋ ๋ฐฉ๋ฒ์ด ์ธ๋ถ๋ก๋ถํฐ์ ์ฃผ์ ์ด ์๋, ์ค์ค๋ก ๊ฒ์์ ์ด์ฉํ๋ค.
๋ํ ํ์๋ก ํ๋ ์์กด ์ค๋ธ์ ํธ๋ฅผ ๋ฅ๋์ ์ผ๋ก ์ฐพ๋๋ค.
์ฆ, ๋ฐํ์ ์ ์์กด๊ด๊ณ๋ฅผ ๋งบ์ ์ค๋ธ์ ํธ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ๊ณผ ์ค๋ธ์ ํธ์ ์์ฑ ์์ ์ ์ธ๋ถ ์ปจํ ์ด๋์๊ฒ IoC๋ก ๋งก๊ธฐ์ง๋ง,
์ด๋ฅผ ๊ฐ์ ธ์ฌ ๋๋ ๋ฉ์๋๋ ์์ฑ์๋ฅผ ํตํ ์ฃผ์ ๋์ ์ค์ค๋ก ์ปจํ ์ด๋์๊ฒ ์์ฒญํ๋ ๋ฐฉ๋ฒ์ด๋ค.
โ๏ธ ์์กด๊ด๊ณ ์ฃผ์ (DI) VS ์์กด๊ด๊ณ ๊ฒ์(DL)
์์กด๊ด๊ณ ์ฃผ์ ์ด ํจ์ฌ ๋จ์ํ๊ณ ๊น๋ํ๋ค.
์๋ํ๋ฉด, DL์ ์ฌ์ฉํ ๋ ์ฝ๋ ์์ ์ค๋ธ์ ํธ ํฉํ ๋ฆฌ ํด๋์ค๋ ์คํ๋ง API๊ฐ ๋ํ๋๋๋ฐ,
์ ํ๋ฆฌ์ผ์ด์ ์ปดํฌ๋ํธ๊ฐ ์ปจํ ์ด๋์ ๊ฐ์ด ์ฑ๊ฒฉ์ด ๋ค๋ฅธ ์ค๋ธ์ ํธ์ ์์กดํ๊ฒ ๋๋ ๊ฒ์ด ๋ฐ๋์ง ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
์์กด๊ด๊ณ ๊ฒ์์
main() ๋ฉ์๋์ ์๋ธ๋ฆฟ์ ์ฌ์ฉ์ ์์ฒญ ์ main() ๋ฉ์๋์ ๋น์ทํ ์ญํ ์ ํ๋ ๊ณณ์ ์ฌ์ฉํด์ผ ์ ์ ํ๋ค.
๐งพ ์ ๋ฆฌ
- DI๋ฅผ ์ํด ์์กด๊ด๊ณ์ ๋ํด ๋ช ํํ ์์์ผ ํ๋ค.
- DI๋ IoC์ ๊ฐ๋ ์ ๋ ๋ช ํํ ํ ์ฉ์ด์ด๋ค.
- DI์ DL ์ค DI๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ๋จ์ํ๊ณ ๊น๋ํ๋ค.
์ฐธ๊ณ ๋ฌธ์ :
ํ ๋น์ ์คํ๋ง3 (์ด์ผ๋ฏผ)
'Back-end > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ํ ์คํธ ์๋ํ - JUnit ๋๊ตฌ ํ์ฉ (0) | 2020.08.06 |
---|---|
[Spring] XML์ ์ด์ฉํ DI ์์กด๊ด๊ณ ์ค์ ์ ๋ณด (0) | 2020.08.02 |
[Spring] ์ฑ๊ธํค ๋ ์ง์คํธ๋ฆฌ (0) | 2020.08.02 |
[Spring] ์คํ๋ง์ IoC (0) | 2020.07.31 |
[Spring] ์ค๋ธ์ ํธ ํฉํ ๋ฆฌ (0) | 2020.07.29 |