IoC

ν”„λ‘œκ·Έλž¨μ˜ μ œμ–΄μ˜ 흐름 ꡬ쑰가 λ°”λ€ŒλŠ” 것 이닀.

일반적인 객체의 흐름은 λ‹€μŒκ³Ό κ°™λ‹€.

  1. 객체 생성
  2. μ˜μ‘΄μ„± 객체 생성 (클래슀 λ‚΄λΆ€)
  3. μ˜μ‘΄μ„± 객체 λ©”μ†Œλ“œ 호좜

ν•˜μ§€λ§Œ μŠ€ν”„λ§ λ‚΄λΆ€μ—μ„œλŠ” λ‹€μŒκ³Ό 같은 μˆœμ„œλ‘œ 생성 및 μ‹€ν–‰λœλ‹€.

  1. 객체 생성
  2. μ˜μ‘΄μ„± 객체 μ£Όμž… (μŠ€ν”„λ§μ—κ²Œ μœ„μž„ν•˜μ—¬ λ§Œλ“€μ–΄λ†“μ€ 객체)
  3. μ˜μ‘΄μ„± 객체 λ©”μ†Œλ“œ 호좜

μŠ€ν”„λ§μ΄ λͺ¨λ“  μ˜μ‘΄μ„± 객체λ₯Ό μŠ€ν”„λ§μ΄ μ‹€ν–‰λ λ•Œ λ‹€ λ§Œλ“€μ–΄ μ£Όκ³  ν•„μš”ν•œ 곳에 μ£Όμž…μ‹œμΌœμ€ŒμœΌλ‘œμ¨
Bean 듀은 μ‹±κΈ€ν„΄ νŒ¨ν„΄μ˜ νŠΉμ§• 을 가진닀.

μ œμ–΄μ˜ 흐름을 μ‚¬μš©μžκ°€ 컨트둀 ν•˜λŠ”κ²ƒμ΄ μ•„λ‹Œ μŠ€ν”„λ§μ—κ²Œ 맏겨 μž‘μ—…μ„ 처리(μŠ€ν”„λ§μ΄ 처리) ν•˜κ²Œ λœλ‹€. (일반적인 Java μ†ŒμŠ€λ“€μ€ 슀슀둜 μ œμ–΄ 및 μ†ŒλΉ„ν•¨)

μ‚¬μš©μžλŠ” μžμ‹ μ΄ λ§Œλ“  객체가 어디에 μ‚¬μš©λ˜λŠ”μ§€ μ•Œ 수 μ—†κ³  μ œμ–΄ κΆŒν•œμ„ μœ„μž„λ°›λŠ” νŠΉλ³„ν•œ 객체에 μ˜ν•΄μ„œ λ§Œλ“€μ–΄μ§€κ³  μ‚¬μš©λœλ‹€. (μžμ‹ λ“€μ΄ λ§Œλ“  Java μ†ŒμŠ€κ°€ ν”„λ ˆμž„μ›Œν¬μ— μ˜ν•΄ μ†ŒλΉ„λ¨)

μ΄λŠ” λ‹€μŒ λ‘κ°€μ§€μ˜ κ΅¬ν˜„ λ°©λ²•μœΌλ‘œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

DL (Dependency Lookup : μ˜μ‘΄μ„± 검색)

μ €μž₯μ†Œμ— μ €μž₯λ˜μ–΄ μžˆλŠ” 빈 (Bean) 에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ κ°œλ°œμžλ“€μ΄ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ œκ³΅ν•˜λŠ” API λ₯Ό μ΄μš©ν•˜μ—¬ μ‚¬μš©ν•˜κ³ μž λΉˆμ„ Lookup ν•˜λŠ” 것

DI (Dependency Injection : μ˜μ‘΄μ„± μ£Όμž…)

각 계측 사이와 각 클래슀 μ‚¬μ΄μ˜ ν•„μš”λ‘œ ν•˜λŠ” 의쑴 관계λ₯Ό μ»¨ν…Œμ΄λ„ˆκ°€ μžλ™μœΌλ‘œ μ—°κ²°ν•΄ μ£ΌλŠ”κ²ƒ

DL 을 μ‚¬μš©μ‹œ μ»¨ν…Œμ΄λ„ˆμ˜ 쒅속성이 μ¦κ°€ν•˜μ—¬, 이λ₯Ό 쀄이기 μœ„ν•΄μ„œ DI λ₯Ό μ‚¬μš©

public class Parent {
    private Child child;

    public void setChild(Child child) {
        this.child = child;
    }
}

μŠ€ν”„λ§μ—μ„œλŠ” 객체의 생성과 μ†Œλ©Έμ— κ΄€λ ¨λœ μž‘μ—…μ„ μžλ™μœΌλ‘œ μˆ˜ν–‰ν•΄ μ£ΌλŠ”λ° 객체가 μƒμ„±λ˜λŠ”κ³³μ„ Bean Container 라고 ν•œλ‹€.

μŠ€ν”„λ§μ—μ„œλŠ” 객체λ₯Ό Bean 이라고 λΆ€λ₯΄λ©°, ν”„λ‘œμ νŠΈκ°€ 싀행될 λ•Œ μ‚¬μš©μžκ°€ Bean 으둜 κ΄€λ¦¬ν•˜λŠ” 객체듀을 μžλ™μœΌλ‘œ 생성해 μ€€λ‹€.

μŠ€ν”„λ§μ—μ„œ μ‹€ν–‰ν•  λ•Œ μƒμ„±ν–ˆλ˜ Bean 을 μ£Όμž…μ‹œμΌœμ£ΌλŠ” 과정을 DI 라고 ν•œλ‹€.