π€μμ‘΄μ±(Dependency)μ μ μμ μνμ±
- Spring
μμ‘΄μ±(Dependency)λ?
Dependency(λλ μμ‘΄μ±)μ μ½λμμ λ λͺ¨λκ°μ μ°κ²°μ΄λ€.
κ°μ²΄μ§ν₯μΈμ΄μμλ λ ν΄λμ€κ°μ κ΄κ³λΌκ³ λ§νλ€.
μΌλ°μ μΌλ‘ λ μ€ νλκ° λ€λ₯Έ νλλ₯Ό μ΄λ ν μ©λλ₯Ό μν΄ μ¬μ©νλ€.
μμ‘΄μ±(Dependency)κ° μνν μ΄μ
λ λͺ¨λμ΄ μ°κ²°λμ΄ μμ΄ νλμ λͺ¨λμ΄ λ°λλ©΄ μμ‘΄ν λ€λ₯Έ λͺ¨λκΉμ§ λ³κ²½μ΄ μ΄λ£¨μ΄μ§κΈ° λλ¬Έμ μμ‘΄μ±(Dependency)λ μννλ€.
π€ λν, ν λͺ¨λμμ λ€λ₯Έ λͺ¨λμ μ¬μ©νλ€κ³ νμ λ ν μ€νΈλ₯Ό νλ€ κ°μ μ νλ©΄ ν μ€νΈκ° μ€ν¨νμ λ νμ¬ λͺ¨λμμμ μ€ν¨μΈμ§, μμ‘΄νλ λͺ¨λμ μ€ν¨μΈμ§ μ μ μλ€.
μνν Dependencyλ₯Ό ν΄κ²°νλ λ°©λ²
μμ‘΄μ± μ£Όμ
(Dependency Injection)μ μ¬μ©νλ€.
'new'λ₯Ό μ¬μ©νμ¬ λͺ¨λ λ΄μμ νΉμ λͺ¨λμ μ΄κΈ°ννμ§ μμΌλ €λ©΄ κ°μ²΄ μμ±μ λ€λ₯Έ κ³³μμ ν λ€, μμ±λ κ°μ²΄λ₯Ό μ°Έμ‘°νλ©΄ ν΄κ²°λλ€.
μμ‘΄μ± μ£Όμ μ IoC(Inversion of Control)κ°λ μ λ°νμΌλ‘ μ΄λ£¨μ΄μ§κΈ°μ ν΄λμ€κ° μΈλΆλ‘λΆν° μμ‘΄μ±(Dependency)λ₯Ό κ°μ ΈμΌ νλ€.
Javaν΄λμ€κ° newμ°μ°μλ₯Ό ν΅ν΄ λ€λ₯Έ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄ ν΄λΉ ν΄λμ€μ λ 립μ μΌλ‘ ν μ€νΈνκ³ μ¬μ©ν μ μμΌλ©° μ΄λ₯Ό νλμ’ μμ±μ΄λΌκ³ νλ€.
ν΄λμ€ μΈλΆμμ μ’ μμ±μ μ 곡νλ€λ©΄?
- ν΄λμ€λ₯Ό μ¬μ¬μ© ν κ°λ₯μ±μ λμ΄κ³ , λ€λ₯Έ ν΄λμ€μ λ 립μ μΌλ‘ ν΄λμ€λ₯Ό ν μ€νΈ ν μ μλ€λ μ΄μ μ΄ μλ€.
- λΉμ¦λμ€ λ‘μ§μ νΉμ ꡬνμ΄ μλ, ν΄λμ€λ₯Ό μμ±νλλ° λ§€μ° ν¨κ³Όμ μ΄λ€.
μμ‘΄μ± μ£Όμ (Dependency Injection)μ λ°©λ²
- μμ±μλ₯Ό μ½μ (Contructor)
- λ©€λ² λ³μ(νλ) μ½μ (Field)
- λ©μλ(νλΌλ―Έν°) μ½μ (Method)
JSR330μ λ°λ₯Έ μ’ μμ± μ£Όμ μμ
π‘Spring 3.0μ μ¬μ©νλ€λ©΄ JSR-330 μ΄λ Έν μ΄μ (μμ‘΄μ± μμ )μ μ§μμ λ°μ μ μμΌλ©° ν΄λΉ μ΄λ Έν μ΄μ λ€μ μ€νλ§ μ΄λ Έν μ΄μ λ€κ³Ό κ°μ λ°©λ²μΌλ‘ μ€μΊλλ€. ν΄λΉ μ΄λ Έν μ΄μ μ μ¬μ©νκΈ° μν΄μλ ν΄λμ€ pathμ κ΄λ ¨ jar νμΌλ€μ κ°μ§κ³ μμ΄μΌ νλ€.
- μμ±μ(Constructor)
- λ©€λ² λ³μ(Field)
- λ©μλ(Method)
@Injectλ‘ μ£Όμμ²λ¦¬λ λ©μλλ νλκ° νΈμΆλλ μμλ JSR330μ μν΄ μ μλμ§ μλλ€.
- @Moudle : ν΄λΉ μ΄λ Έν μ΄μ λ ν΄λμ€λ μ½μ ν μ μλ κ°μ²΄λ₯Ό μ 곡λλ©° ν΄λμ€λ @Provides μ΄λ Έν μ΄μ λ©μλλ₯Ό ν΅ν΄ μ μνλ€. ν΄λΉ λ©μλμ returnλ μ€λΈμ νΈλ μ’ μμ± μ½μ μ μ¬μ© κ°λ₯νλ€. (@Module -> @Provides)
- @Inject : μμ‘΄μ±μ μ μνλλ° μ¬μ©
- @Component : ν΄λΉ μ΄λ Έν μ΄μ μΈν°νμ΄μ€λ κ°μ²΄ μ 곡μ(Module)μ μμ‘΄ κ΄κ³λ₯Ό νννλ κ°μ²΄ μ¬μ΄μ μ°κ²°μ μ μνλ©° ν΄λΉ μ°κ²°μ λν ν΄λμ€λ Daggerμ μν΄ μμ±λλ€.
Dependency Injectorλ?
- λͺ¨λμ μΈμ€ν΄μ€λ₯Ό μ 곡νλ©° μμ‘΄μ±μ μ£Όμ νλ λͺ¨λμ λ§νλ€.