์์ด ์ด๋ง์ด๋งํฉ๋๋ค. ์ ๊ฐ ์จ๋๋ ๋ถ๋ด์ค๋ฌ์ด ๋ถ๋์ด๋ค์;;
๊ทผ๋ฐ ๋๊ฒ ์ค์ํ ๊ฒ ๊ฐ์ต๋๋ค. Bean, ์ค์ ํ์ผ, ์ปจํ ์ด๋, DL, DI.. ์์ํ ๋จ์ด๊ฐ ๋ง์ด ๋์ค๊ณ ์ด๋ค๋ผ๋ฆฌ ๊ด๊ณ์ฑ์ด ์์ด์ ์์ง ํท๊ฐ๋ฆฌ๋ค์. ์ ๊ทธ๋ฆฌ๊ณ
(์ ํํ ๋ง) ์ข์ ์์์ด ์์ต๋๋ค.ใ 6์ผ ๋ฒผ๋ฝ์น๊ธฐํด์ ํ ์ต์คํผํน Lv.6 ๋ฌ์ฑํ์ต๋๋ค. 7์ผ ๋ฒผ๋ฝ์น๊ธฐํ์ผ๋ฉด HOXY Lv.7 ๊ฐ๋ฅ? ํธํฐใ ใ .. 2๋ ์ ์๊ฐ๋ณด๋ค ๋น ๋ฅด๋๋ผ๊ตฌ์.. ์คํผํน ์ดํ ์ ์ ํ์ํ์ ๋ถ๋ค ์คํฝ ๋ง๊ณ ํ ์ค๋ณด์ธ์ ํ ์ค. ์ ์คํฝ์ IM1 ๋์๋๋ฐ ํ ์ต์คํผํน์ Lv.6 ์ต๊ณ ์ ๋ฐ์์ด์. ํ ์ค ๋ณด์ธ์ ํ ์ค
ํ๊ธฐ ์ฐ๋ผ๋๊น ์ดํ ์ ์ ์ด์ผ๊ธฐ ํ๊ณ ์๋ค์ ์ฉ์ฉ์ฉ.. ์ดํดํด์ฃผ์ธ์ ํ ์ค ์ฌ์ ์ํด๋ ๋์ ๊ธฐ๋ป์ ๊ทธ๋ฌ๋๊ฒ๋๋ค.
์ด๋ฒ์ฃผ ํ์ดํ ํ์๊ณ ๋ค๋ค ํ๋ณตํ์๊ธธ ๋ฐ๋๋๋ค.
- IoC ๊ฐ๋
- IoC ๊ด๋ จ ์ฉ์ด ์ดํด
- IoC ๊ฐ๋ ์ ๋ํด ์์๋ด ๋๋ค.
- DL๊ณผ DI์ ๋ํด ์ดํดํ๊ณ IoC ๊ด๋ จ ์ฉ์ด๋ค์ ๋ํด์ ์์๋ด ๋๋ค.
IoC(Inversion of Control)์ด๋ ๊ฐ์ฒด์ ์์ฑ, ์๋ช ์ฃผ๊ธฐ์ ๊ด๋ฆฌ๊น์ง ๋ชจ๋ ๊ฐ์ฒด์ ๋ํ ์ ์ด๊ถ์ด ๋ฐ๋์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฆ, ์ ์ด๊ถ์ ์ญ์ ์ด๋ค.
โป ์ปดํฌ๋ํธ ์์กด๊ด๊ณ ๊ฒฐ์ (component dependency resolution), ์ค์ (configuration) ๋ฐ ์๋ช ์ฃผ๊ธฐ(lifecycle)๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋์์ธ ํจํด(Design Pattern)
IoC๋ ๊ฐ์ฒด๋ฅผ ์ ์ดํ๋ ์ ์ด๊ถ์ด ๊ฐ๋ฐ์๊ฐ ์๋ ์์คํ ์๊ฒ ์๋ ๊ฒ์ ๋งํฉ๋๋ค. Java๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ ์ฌ์ฉ๋์๋ค๊ฐ ์๋ฉธ๋๊ธฐ๊น์ง์ ์๋ช ์ฃผ๊ธฐ๊ฐ ์ค์ํฉ๋๋ค. ์ด ๊ณผ์ ์ ์๊ฐ์ ๋น์ฉ์ด ๊ต์ฅํ ๋ง์ด ๋๋ ์์ ์ ๋๋ค. ๊ทธ ์ค ์์ฃผ ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฏธ๋ฆฌ ์ฌ๋ ค๋๊ณ , ์ฌ์ฉํ ํ์ ๋ฐ๋ก ์๋ฉธํ์ง๋ ์๋ ๋ฑ์ ๊ด๋ฆฌ๋ฅผ ์์คํ ์ด ํ๋ ๊ฒ์ ๋๋ค. Spring์ ์ด๋ฌํ ์ญํ ์ ํ๋ ์ปจํ ์ด๋๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฆผ์ ๋ณด์๋ฉด, IoC๊ฐ ์๋ ๊ฒฝ์ฐ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ด ์ค๋ฉด ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. IoC์ธ ๊ฒฝ์ฐ๋ ์๋์ ์ผ๋ก ๋๊ตฐ๊ฐ(์ปจํ ์ด๋๊ฒ ์ฃ )๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์ ๊ณตํฉ๋๋ค.
โป ์คํ๋ง ํ๋ ์์ํฌ๋ ๊ฐ์ฒด์ ๋ํ ์์ฑ ๋ฐ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์. ์ฆ, IoC ์ปจํ ์ด๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- IoC ์ปจํ ์ด๋๋ ๊ฐ์ฒด์ ์์ฑ์ ์ฑ ์์ง๊ณ , ์์กด์ฑ์ ๊ด๋ฆฌํ๋ค.
- POJO์ ์์ฑ, ์ด๊ธฐํ, ์๋น์ค, ์๋ฉธ์ ๋ํ ๊ถํ์ ๊ฐ์ง๋ค.
- ๊ฐ๋ฐ์๋ค์ด ์ง์ POJO๋ฅผ ์์ฑํ ์ ์์ง๋ง ์ปจํ ์ด๋์๊ฒ ๋งก๊ธด๋ค.(๊ฐ์ ๋ ์๋)
๊ฐ์ฒด๋ค์ด POJO๋ก ๋ง๋ค์ด์ง๋๋ค. ์ด๋ฐ ๊ฐ์ฒด๋ค์ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ ๋ชจ๋์ Spring ์ปจํ
์ด๋๋ผ ํฉ๋๋ค. IoC ์ปจํ
์ด๋๋ Spring์ด ์ต์ด๋ ์๋๋๋ค. ์ด ์ปจํ
์ด๋๋ก ์ธํด ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ ๊ฒฝ์ธ ํ์๊ฐ ์์ต๋๋ค.
์์๋ก ์น ์์คํ
์ ๊ฒฝ์ฐ ์์ฒญ์ด ์ ๋ง ๋ง์ ํธ์ด๋ผ์ ์์ฒญ๋ง๋ค ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค. ๋ํ ์ฌ์ฉ๋๋ฉด ์๋ฉธ๋ ์์ผ์ผํ๋๋ฐ ์ด๋ฅผ ๊ฐ๊ณผํ๋ฉด ์๋ฒ ๊ณผ๋ถํ๊ฐ ์๊ธธ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ด ๋๋ IoC ์ปจํ
์ด๋๊ฐ ๊ต์ฅํ ์ ์ฉํ๊ฒ ์ฃ ?
IoC๋ DL๊ณผ DI๋ก ๋๋ ์ ์์ต๋๋ค. Spring์์ ์๋์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๊ณ ๊ด๋ฆฌํ๋ ค๋ฉด ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ด ์์ด์ผํฉ๋๋ค.
์ฒซ์งธ๋ก, Spring ์ปจํ
์ด๋์ ์ฌ๋ผ์์๋ ๊ฐ์ฒด๋ค ์ค์์ ํด๋ผ์ด์ธํธ๊ฐ ์ํ๋ ๊ฐ์ฒด๋ฅผ ์ฐพ๋ ๊ธฐ๋ฅ์ด DL์
๋๋ค. ๊ฐ์ฒด ID๋, ํ์
์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ฐพ์ต๋๋ค.
๋์งธ๋ก, ๊ฐ์ฒด๋ค๋ผ๋ฆฌ์ ์์กด๊ด๊ณ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ฃผ๋ ๊ฒ์ด DI์
๋๋ค.
์์๋ก A ๊ฐ์ฒด๊ฐ B ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด B ๊ฐ์ฒด๊ฐ A ๊ฐ์ฒด์ ์ฃผ์
์ด ๋์ด์ผํ๋๋ฐ, ์ด๋ ๊ฒ ์๋์ ์ผ๋ก ์ฐธ์กฐ์ํค๋ ๊ธฐ๋ฅ์ด DI๋ผ๋ ๊ฒ์ด์ฃ .
์์กด์ ์ํ ๊ฐ์ฒด ์ฃผ์
(Injection) ๋ฐฉ์์ 3๊ฐ์ง ๋ฐฉ์์
๋๋ค.(๊ทธ๋ฆผ ์ฐธ๊ณ )
1. Setter์ ์ํ Injection
2. Constructor(์์ฑ์)์ ์ํ Injection
3. Method(๋ฉ์๋ ์ด๋ฆ)์ ์ํ Injection
Spring์์๋ ์ด 3๊ฐ์ง ๋ฐฉ์์ ๋ชจ๋ ์ง์ํ๊ณ ์์ต๋๋ค.
๋น ์ค์ ํ์ผ์ XML๋ก ๋์ด ์์ต๋๋ค.
- ์คํ๋ง ์ปจํ ์ด๋์ ์ํด์ ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด
- ์คํ๋ง ๋น ์ด๋ผ๊ณ ๋ ํจ
- ์คํ๋ง ์ค์ ํ์ผ์ ๋ฑ๋ก๋์ด ์ฌ์ฉ
- ์๋ ๋ฑ๋ก ๊ธฐ๋ฅ ์ฌ์ฉ ๊ฐ๋ฅ
- ๊ด๋ฆฌ๋๋(managed) ๋น์ด ๋ชจ์ฌ์๋ ๊ณณ
- IoC ์ปจํ ์ด๋๋ก์จ Application Context ํด๋์ค๋ก ๊ตฌํ๋จ
IoC ์ปจํ ์ด๋๋ ๊ฐ๋ ๋๋์ด๋ผ๋ฉด,, Application Context ํด๋์ค๋ IoC ์ปจํ ์ด๋๋ฅผ ์ค์ ๋ก ๊ตฌํํด๋์ ๊ฒ์ผ๋ก ๋ณด๋ฉด ๋ฉ๋๋ค.
์ด๋ฒ ํฌ์คํ ์ค์ต์ ์ง์ ํฌ์คํ ์ค์ต ๊ฒฐ๊ณผ๋ฌผ์ ์ด์ด์ ํฉ๋๋ค.
โ ํ๋ก์ ํธ -> Java Resources -> src/main/java -> new -> Package ํด๋ฆญ
DAO ํด๋์ค๋ฅผ ๋ง๋ค๊ธฐ ์ ์ ํจํค์ง๋ฅผ ๋ง๋ค๊ฒ๋๋ค.
โ Name ์
๋ ฅ -> Finish ํด๋ฆญ
Name์ '๊ทธ๋ฃนID.ํ๋ก์ ํธ๋ช
์ผ๋ถ' ์ด๋ ๊ฒ ์ง์ต๋๋ค.
๊ทธ๋ฃนID ์์ด๋ฒ๋ฆฌ์
จ๋ค๋ฉด pom.xml์์ ํ์ธํด๋ณด์ค ์ ์์ต๋๋ค.
โ ์์ฑ๋ ํจํค์ง์ ํด๋์ค๋ฅผ ํ๋ ์์ฑํฉ๋๋ค.
โ ์ด๋ฆ ๋์ถฉ ์ง๊ณ finish ํด๋ฆญ
โ ๋จ์ํ ๋ ์์ ํฉ์ ๊ตฌํ๋ ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค.
์ด ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ฉ์ธ ๋ฉ์๋๊ฐ ํ์ํ๊ฒ ์ฃ ?
๊ฐ์ ํจํค์ง์์ ์๋ก์ด ํด๋์ค๋ฅผ ํ๋ ๋ ๋ง๋ค์ด์ฃผ์ธ์.
โ ์ด๋ฆ ๋ง์๋๋ก ์ง์ผ์๊ณ , ํ์ํ ๋ถ๋ถ ์ฒดํฌ ํด์ฃผ์ธ์.
โ ๋ฉ์ธ ํด๋์ค์ ์๊น ๋ง๋ ๋ฉ์๋๋ฅผ ํธ์ถํด์ ์ถ๋ ฅ๊น์ง ํด๋ดค์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ด๋ ๊ฒ ๋ง์ด ํด์์ฃ .
์ด์ ์ด ์ฝ๋๋ฅผ DI๋ฅผ ์ฌ์ฉํ๋๋ก ๋ฐ๊ฟ๋ณด๊ฒ ์ต๋๋ค.
HelloDAO ํด๋์ค๊ฐ ๋น ์ปจํ
์ด๋์ ๊ด๋ฆฌ๋ ์ ์๋๋ก ๋ฑ๋กํด์ผํฉ๋๋ค.
๋ฑ๋กํ๊ธฐ ์ํด ์คํ๋ง ์ค์ ํ์ผ์ ์ฌ์ฉํฉ๋๋ค.
๊ทธ ์คํ๋ง ์ค์ ํ์ผ์ ๋ง๋ค๊ฒ ์ต๋๋ค.
์คํ๋ง ์ค์ ํ์ผ์ src/main/resources์ ๋ง๋ญ๋๋ค.
โ new -> Other ํด๋ฆญ
โ Spring -> Spring Bean Configuration file ํด๋ฆญ
โ File-name ์ ๋ ฅ -> finish ํด๋ฆญ
โ beans ํ๊ทธ ๋ด์ bean ํ๊ทธ ์์ฑ
id ์์ฑ : ํด๋์ค๋ช
(๋จ, ์ฒซ๋ฌธ์๊ฐ ์๋ฌธ์์ด์ด์ผ ํจ)
class ์์ฑ : FULL๋ก ์ ์ด์ค์ผ ํจ('๊ทธ๋ฃนID.ํด๋์ค๋ช
')
์ด๋ ๊ฒ ์ ์ด์ค์ผ๋ก์จ HelloDAO ํด๋์ค๋ฅผ ์ปจํ ์ด๋๊ฐ ์ธ์ํ ์ ์์ต๋๋ค.
์ด์ Main ๋ฉ์๋์์ ์ค์ ํ์ผ์ ๋ฑ๋ก๋ HelloDAO ๋น(๊ฐ์ฒด)์ ์ฌ์ฉํ๋ ๋จ๊ณ๋ง ๋จ์์ต๋๋ค.
์ฝ๋ ์์๋ ์ด๋ ์ต๋๋ค.
Spring ์ปจํ
์ด๋ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ์์ฑ์ ์ธ์๋ก ์๊น ๋ง๋ค์๋ ๋น ์ค์ ํ์ผ(xml)์ ๊ฒฝ๋ก ํฌํจํ์ฌ ์จ์ฃผ๋ฉด ๋ฉ๋๋ค.
์ด ์ค์ ํ์ผ์ด ๋ก๋ฉ๋ ๋, ์ค์ ํ์ผ์ ๋ฑ๋ก๋ ๋ชจ๋ Bean๋ค์ด ๊ฐ์ด ๋ก๋ฉํ๊ฒ ๋ฉ๋๋ค. ์ด ์์ ์ Bean๋ค์ด ๋ชจ๋ ์์ฑ๋๋ ๊ฒ์
๋๋ค.
์์ ํ ์ปจํ
์ด๋ ๊ฐ์ฒด๋ฅผ ํ์ฉํ์ฌ ๋น(๊ฐ์ฒด)์ ์ฐพ์ต๋๋ค.(DL)
์ธ์ 1์ ํด๋์ค ์ด๋ฆ, ์ธ์ 2๋ ํด๋์ค์ ํ์
์ ์ ์ต๋๋ค.
โป Bean ์์ฑ์ (1) ์์ ์์ ์์ฑ๋ฉ๋๋ค. ์ฌ๊ธด ๋จ์ ๊ฐ์ ธ์ค๋ ๊ตฌ๊ฐโ
์ฐพ์ ๋น(๊ฐ์ฒด)์ ํ์ฉํ์ฌ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
โ ๊ฒฐ๊ณผ์ ๋๋ค.
๋นจ๊ฐ์ ์๋ฌ๊ฐ์ง๋ง ์๋๋๋ ใ
ใ
์ด๋ก์ ์์๋ก ํ์ํ ๋ถ๋ถ์ด ๋ํ๋ด๋ ์๋ฏธ๋ '์ XML๋ก๋ถํฐ ๋น(๊ฐ์ฒด)์ Loadingํ๋ค.' ๋ผ๋ ๊ฒ์
๋๋ค.
๋ชจ๋ ์ฝ๋ ๋ผ์ธ์ด ๋๋๋ฉด dao ๊ฐ์ฒด๋ ๋ฐํ(garbage collecting)๋๋๋ฐ,
dao ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ Bean์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ฌ๋ผ์ง๋ ๊ฒ์ ์๋๋๋ค. ctx ์ปจํ
์ด๋๋ก ๋ฐํ๋๋ ๊ฒ์ด๋ฏ๋ก ๋ด๋ถ์ ์ผ๋ก ๊ต์ฅํ ์ฑ๋ฅ์ ๋ณด์
๋๋ค. ์ค์ ๋ก ๋ฐํํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ถํ๊ฐ ๋ง์ด ์ค์ด๋ค์ฃ .