Dependency Injection

μš°μ„  Dependency Injection 이라고 ν•˜λŠ” 것은 DIP(Dependecy Inversion Principle) λ₯Ό 기반으둜 ν•œλ‹€.

μœ„μ—μ„œ λ³Έ μ˜ˆμ‹œμ²˜λŸΌ, Spring Container μ—μ„œ μƒμ„±λ˜κ³  κ΄€λ¦¬λ˜λŠ” object 듀은 각각의 ν•˜μœ„μ— λ˜λ‹€λ₯Έ dependency 관계가 μ‘΄μž¬ν•  것이닀. 예λ₯Ό λ“€μ–΄μ„œ, FootballCoach λŠ” μˆ˜μ„ μ½”μΉ˜λ₯Ό, μˆ˜μ„ μ½”μΉ˜λŠ” 막내 μ½”μΉ˜λ₯Ό ν•„μš”λ‘œ ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

이에 λŒ€ν•˜μ—¬ Member class λŠ” Spring Container λ‘œλΆ€ν„° FootballCoach object λ₯Ό μš”κ΅¬ν•  λ•Œ, FootballCoach 의 ν•˜μœ„μ— μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  dependency λ₯Ό ν•œλ²ˆμ— μ–»κΈ°λ₯Ό 원할 것이닀.

λ”°λΌμ„œ Dependecy Injection μ΄λž€, μ΄λ ‡κ²Œ 객체λ₯Ό μ›ν•˜λŠ” Member 의 μ‹œμ„ μœΌλ‘œ λ³΄μ•˜μ„ λ•Œ, object κ°„μ˜ dependecy λ₯Ό μ™ΈλΆ€μ—μ„œ κ²°μ •ν•˜κ³  μžμ‹ μ—κ²Œ μ£Όμž…ν•΄μ£ΌλŠ” 섀계 νŒ¨ν„΄μ„ μ˜λ―Έν•˜λŠ” 것이닀. (μ‹€μ œλ‘œλŠ” μžμ‹ μ—κ²Œ 슀슀둜 μ£Όμž…ν•˜λŠ” 것이 μ•„λ‹ˆλΌ Spring Container κ°€ 이λ₯Ό μˆ˜ν–‰ν•œλ‹€.)

Injection Types

Spring μ—μ„œλŠ” μ—¬λŸ¬κ°€μ§€ λ°©λ²•μœΌλ‘œ Injection 을 μ œκ³΅ν•˜κ³  μžˆλŠ”λ°, λŒ€ν‘œμ μœΌλ‘œ λ‹€μŒ 두 κ°€μ§€μ˜ 방법이 μžˆλ‹€.

  • Constructor Injection
  • Settter Injection

Constructor Injection 은 constructor λ₯Ό μ΄μš©ν•˜λŠ” λ°©μ‹μœΌλ‘œ, object 생성 μ‹œμ μ— λ°˜λ“œμ‹œ μ„€μ •λ˜λ―€λ‘œ ν•„μˆ˜μ μΈ dependency 을 μ²˜λ¦¬ν•  λ•Œ μ ν•©ν•˜λ‹€.

Setter Injection 은 dependency λ₯Ό μ„ νƒμ μœΌλ‘œ μ„€μ •ν•  수 μžˆμœΌλ―€λ‘œ optional dependency λ₯Ό μ²˜λ¦¬ν•  λ•Œ μ ν•©ν•˜λ‹€.

Spring Autowiring

dependency injection 을 μœ„ν•΄μ„œ Spring 은 Autowiring μ΄λΌλŠ” 것을 μ‚¬μš©ν•  수 μžˆλ‹€.

Autowiring 은 Dependency Injection 을 μžλ™μœΌλ‘œ μˆ˜ν–‰ν•΄μ£Όλ©°, @Autowired annotation 을 μ‚¬μš©ν•˜μ—¬ Spring Container 에 λ“±λ‘λœ Bean μ€‘μ—μ„œ type 이 μΌμΉ˜ν•˜λŠ” object λ₯Ό μžλ™μœΌλ‘œ μ°Ύμ•„μ„œ inject ν•΄μ€€λ‹€.

μ—¬κΈ°μ„œ Bean 은 Spring Container 에 μ˜ν•΄ κ΄€λ¦¬λ˜λŠ” object 둜, κ°œλ°œμžκ°€ ꡳ이 XML νŒŒμΌμ΄λ‚˜ Java Source Code μ—μ„œ μ„€μ •ν•˜μ§€ μ•Šλ”λΌλ„ class 에 @Component annotation 만 μΆ”κ°€ν•¨μœΌλ‘œμ¨ Spring Container 에 Bean 으둜 등둝할 수 μžˆλ‹€.