Home > Backend Development > πŸ“š[Backend Development] μ œμ–΄μ˜ μ—­μ „(IoC)와 μ˜μ‘΄μ„± μ£Όμž…(DI)

πŸ“š[Backend Development] μ œμ–΄μ˜ μ—­μ „(IoC)와 μ˜μ‘΄μ„± μ£Όμž…(DI)
Backend Ddevelopment Database Server Build System

πŸ“š[Backend Development] μ œμ–΄μ˜ μ—­μ „(IoC)와 μ˜μ‘΄μ„± μ£Όμž…(DI)

βœ… 1. μ œμ–΄μ˜ μ—­μ „(IoC: Inversion of Control)

πŸ“Œ μ •μ˜

객제의 생성, 생λͺ…μ£ΌκΈ°, μ˜μ‘΄μ„± 관리 λ“± μ œμ–΄κΆŒμ„ κ°œλ°œμžκ°€ μ•„λ‹Œ ν”„λ ˆμž„μ›Œν¬κ°€ λ‹΄λ‹Ήν•˜λŠ” 것

πŸ“μ‰½κ²Œ λ§ν•˜λ©΄?

  • μ›λž˜λŠ” κ°œλ°œμžκ°€ new ν‚€μ›Œλ“œλ‘œ 객체λ₯Ό μƒμ„±ν•˜κ³  μ—°κ²°ν•΄μ•Ό ν–ˆμ§€λ§Œ, μ΄μ œλŠ” κ·Έ μ±…μž„μ„ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ— λ„˜κΈ΄ κ²ƒμž…λ‹ˆλ‹€.

πŸ” 전톡적 방식 (μ œμ–΄κΆŒ = 개발자)

UserService userService = new UserService();
ArticleService articleService = new ArticleService(userService);

βœ… IoC 방식 (μ œμ–΄κΆŒ = μŠ€ν”„λ§)

@Component
public class ArticleService {
    private final UserService userService;
    
    @Autowired
    public ArticleService(UserService userService) {
        this.userService = userService;
    }
}

➞ 객체 생성 및 μ£Όμž…μ€ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆκ°€ μ•Œμ•„μ„œ ν•΄μ€λ‹ˆλ‹€.

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

πŸ“Œ μ •μ˜

객체가 μ˜μ‘΄ν•˜λŠ” λ‹€λ₯Έ 객체λ₯Ό β€œμ§μ ‘ μƒμ„±ν•˜μ§€ μ•Šκ³ β€ μ™ΈλΆ€μ—μ„œ μ£Όμž…λ°›λŠ” 방식

  • DIλŠ” IoC의 κ΅¬ν˜„ 방식 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.
  • λŒ€ν‘œμ μœΌλ‘œ μƒμ„±μž μ£Όμž…, ν•„λ“œ μ£Όμž…, μ„Έν„° μ£Όμž…μ΄ μžˆμŠ΅λ‹ˆλ‹€.

πŸ”§μ˜ˆ: μƒμ„±μž μ£Όμž…

@Component
public class ArticleService {
    private final UserService userService;
    
    @Autowired
    public ArticleService(UserService userService) {
        this.userService = userService;
    }
}

πŸ”§μ˜ˆ: ν•„λ“œ μ£Όμž…

@Component
public class ArticleService {
    
    @Autowired
    private UserService userService;
}

βœ… IoC vs DI μš”μ•½

ꡬ뢄 μ œμ–΄μ˜ μ—­μ „(IoC) μ˜μ‘΄μ„± μ£Όμž…(DI)
κ°œλ… μ œμ–΄κΆŒμ„ ν”„λ ˆμž„μ›Œν¬μ— λ„˜κΉ€ 객체 κ°„ μ˜μ‘΄μ„±μ„ μ™ΈλΆ€μ—μ„œ μ£Όμž…
μ—­ν•  전체 νλ¦„μ˜ μ œμ–΄λ₯Ό λ°”κΏˆ 객체 κ°„ 관계λ₯Ό 섀정함
관계 DIλŠ” IoCλ₯Ό κ΅¬ν˜„ν•˜λŠ” 방식 쀑 ν•˜λ‚˜ IoC보닀 쒁은 κ°œλ…
μ˜ˆμ‹œ μŠ€ν”„λ§μ΄ Bean을 λ§Œλ“€κ³  관리 μŠ€ν”„λ§μ΄ ν•„μš”ν•œ 의쑴 객체λ₯Ό μ£Όμž…

🎯 결둠

  • IoCλŠ” λˆ„κ°€ 객체λ₯Ό λ§Œλ“€κ³  κ΄€λ¦¬ν•˜λŠλƒμ˜ 문제 β†’ μŠ€ν”„λ§μ΄ λŒ€μ‹  함
  • DIλŠ” μ–΄λ–»κ²Œ 객체 κ°„ 연결을 ν•˜λŠλƒμ˜ 문제 β†’ μƒμ„±μž, ν•„λ“œ 등을 톡해 μ£Όμž