μμ΄ μ΄λ§μ΄λ§ν©λλ€. μ κ° μ¨λλ λΆλ΄μ€λ¬μ΄ λΆλμ΄λ€μ;;
κ·Όλ° λκ² μ€μν κ² κ°μ΅λλ€. 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 컨ν
μ΄λλ‘ λ°νλλ κ²μ΄λ―λ‘ λ΄λΆμ μΌλ‘ κ΅μ₯ν μ±λ₯μ 보μ
λλ€. μ€μ λ‘ λ°ννμ§ μκΈ° λλ¬Έμ λΆνκ° λ§μ΄ μ€μ΄λ€μ£ .