1 λΆ„ μ†Œμš”

μ˜μ‘΄κ΄€κ³„λž€?

μ˜μ‘΄κ΄€κ³„λž€ Aκ°€ B에 μ˜μ‘΄ν•˜κ³  μžˆλ‹€ 라고 ν–ˆμ„ λ•Œ, Bκ°€ λ³€ν•˜λ©΄ A에 영ν–₯을 λ―ΈμΉ˜λŠ” 관계λ₯Ό μ˜λ―Έν•œλ‹€.

예λ₯Ό λ“€λ©΄ 건물(A)은 섀계도(B)에 μ˜μ‘΄ν•œλ‹€κ³  ν•  수 μžˆλ‹€.
섀계도가 λ³€κ²½λœλ‹€λ©΄ 건물 ꡬ쑰에 λΆ„λͺ…νžˆ 영ν–₯을 λ―ΈμΉœλ‹€.

μœ„μ˜ 상황을 μ½”λ“œλ‘œ λ‚˜νƒ€λ‚΄λ³΄λ©΄ μ•„λž˜μ™€ κ°™λ‹€.

public class Structur {
    private BluePrint bluePrint;

    public Structur() {
        this.bluePrint = new Structur();
    }
}

μ΄λŸ¬ν•œ μ½”λ“œλŠ” λͺ‡ 가지 문제점이 μžˆλ‹€.

  1. 두 클래슀 κ°„μ˜ 결합도가 λ†’λ‹€.
    Blueprint와 Structurν΄λž˜μŠ€λŠ” μ„œλ‘œ κ°•ν•˜κ²Œ κ²°ν•©λ˜μ–΄ μžˆλ‹€.
    Blueprintκ°€ μƒˆλ‘­κ²Œ λ³€ν•œλ‹€λ©΄ Structur 클래슀의 μƒμ„±μžλŠ” λ³€κ²½λ˜μ–΄μ•Όν•œλ‹€.
    μ΄λ ‡κ²Œ 맀번 μƒμ„±μžκ°€ λ°”λ€ŒλŠ” μž‘μ—…μ΄ λ™μž‘ν•œλ‹€λ©΄ μœ μ—°μ„±μ΄ 떨어진닀.
  2. 객체듀 κ°„μ˜ 관계가 μ•„λ‹Œ 클래슀 κ°„μ˜ 관계가 맺어진닀.
    객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° 원칙(SOLID) 5원칙인 μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄μ„ μœ„λ°°ν•œλ‹€.
    Structurν΄λž˜μŠ€λŠ” BluePrintν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜κ³  μžˆλ‹€.

μ΄λŸ¬ν•œ λ¬Έμ œμ λ“€μ„ ν•΄κ²°ν•˜λŠ” 것이 μ˜μ‘΄κ΄€κ³„ μ£Όμž…(Dpendency Injection)이닀.

μ˜μ‘΄κ΄€κ³„ μ£Όμž…(DI)

μ˜μ‘΄κ΄€κ³„ μ£Όμž…(DI)μ΄λž€ μ™ΈλΆ€μ—μ„œ μ˜μ‘΄κ΄€κ³„λ₯Ό μ„€μ •ν•΄μ£ΌλŠ” 것을 λ§ν•œλ‹€.
μŠ€ν”„λ§μ—μ„œλŠ” DIλ₯Ό λ‹΄λ‹Ήν•˜λŠ” DI μ»¨ν…Œμ΄λ„ˆκ°€ μ‘΄μž¬ν•œλ‹€.
이 μ»¨ν…Œμ΄λ„ˆκ°€ 객체듀 κ°„μ˜ μ˜μ‘΄κ΄€κ³„λ₯Ό μ£Όμž…ν•΄μ€€λ‹€.

μŠ€ν”„λ§μ—μ„œ μ˜μ‘΄κ΄€κ³„λ₯Ό μ£Όμž…ν•΄μ£ΌλŠ” 방법은 3가지가 μžˆλ‹€.

  1. μƒμ„±μž μ£Όμž…
  2. μ„€μ •μž(setter) μ£Όμž…
  3. ν•„λ“œ μ£Όμž…

https://hellojunho.github.io/spring/Spring-DI-%EC%84%A4%EC%A0%95%EB%B0%A9%EC%8B%9D/

μ˜μ‘΄κ΄€κ³„ μ£Όμž… μ• λ…Έν…Œμ΄μ…˜

μ˜μ‘΄κ΄€κ³„ μ£Όμž… μ• λ…Έν…Œμ΄μ…˜μ€ @Autowired, @Inject, @Resourceκ°€ μžˆλ‹€.

@Autowired

@AutowiredλŠ” λ³€μˆ˜ μœ„μ— μ„€μ •ν•΄ ν•΄λ‹Ή νƒ€μž…μ˜ 객체λ₯Ό μ°Ύμ•„ μžλ™μœΌλ‘œ μ˜μ‘΄κ΄€κ³„λ₯Ό μ£Όμž…ν•œλ‹€.
μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯이닀.

@Inject

@InjectλŠ” @Autowired와 κ°™μ§€λ§Œ, ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯이 μ•„λ‹ˆλΌ μžλ°”μ—μ„œ μ§€μ›ν•˜λŠ” κΈ°λŠ₯으둜 ν”„λ ˆμž„μ›Œν¬μ— 쒅속적이지 μ•Šλ‹€.

@Resource

@ResourceλŠ” ν•΄λ‹Ή νƒ€μž…μ˜ 객체λ₯Ό μ°Ύμ•„ μžλ™μœΌλ‘œ ν• λ‹Ήν•˜κ³ , 객체λ₯Ό μ΄μš©ν•΄ μ˜μ‘΄μ„±μ„ μ£Όμž…ν•  λ•Œ μ‚¬μš©ν•œλ‹€. (@Autowired + @Qualifier)
μžλ°”μ—μ„œ μ§€μ›ν•˜λŠ” κΈ°λŠ₯으둜, ν”„λ ˆμž„μ›Œν¬μ— 쒅속적이지 μ•Šλ‹€.

참고자료

https://code-lab1.tistory.com/122

https://develop-sense.tistory.com/entry/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98-Spring-Dependency-Injection-Annotation

λŒ“κΈ€λ‚¨κΈ°κΈ°