Server/Java & Spring

[Spring] IoC, DIλž€?

thals0 2023. 3. 22. 10:21
728x90

IoC(Inversion of Control)λž€?

IoCλŠ” Inversion of Control의 μ€„μž„ 말둜, μ œμ–΄μ˜ μ—­μ „μ΄λΌλŠ” λœ»μ΄λ‹€. ν”„λ‘œκ·Έλž¨μ˜ 흐름을 κ°œλ°œμžκ°€ μ œμ–΄ν•˜μ§€ μ•Šκ³ , ν”„λ‘œκ·Έλž¨μ΄λ‚˜ ν”„λ ˆμž„μ›€μ΄ 직접 μ œμ–΄λ₯Ό ν•œλ‹€λŠ” 말이닀. μ»΄ν¬λ„ŒνŠΈμ˜ 의쑴 관계 κ²°μ •(Component dependency resolution), 객체의 생λͺ… μ£ΌκΈ°(life cycle)와 같은 일을 λŒ€μ‹  μˆ˜ν–‰ν•΄μ€€λ‹€.

ν”νžˆ μŠ€ν”„λ§ ν”„λ ˆμž„μ›€μ„ μ΄μš©ν•΄μ„œ κ°œλ°œν•  λ•Œ μ—¬λŸ¬κ°€μ§€ Bean을 μ‚¬μš© ν•  것이닀. μ‚¬μš©μžμ˜ μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄, μš”μ²­μ— μ•Œλ§žμ€ Bean을 μƒμ„±ν•΄μ„œ ν•„μš”ν•œ 일을 ν•˜λ„λ‘ μ‹œν‚¨λ‹€. ν•΄λ‹Ή Bean이 ν•  일을 마치면 Bean을 μ‚­μ œν•΄μ€€λ‹€. ν•˜μ§€λ§Œ 이런 객체의 생성과 μ†Œλ©Έμ΄ μ–΄λ–»κ²Œ μ΄λ£¨μ–΄μ§€λŠ”μ§€ μ•Œ ν•„μš”κ°€ μ—†λ‹€. ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 직접 μ œμ–΄ ν•  ν•„μš”κ°€ 없이 ν”„λ ˆμž„μ›€μ΄ 직접 μ œμ–΄ν•΄μ£ΌκΈ° λ•Œλ¬Έμ΄λ‹€. 이것이 IoC μ œμ–΄μ˜ 역전이닀.

μ»¨ν…Œμ΄λ„ˆλž€?

μ»¨ν…Œμ΄λ„ˆ ν˜Ήμ€ IoCμ»¨ν…Œμ΄λ„ˆλΌκ³  λΆ€λ₯Έλ‹€. μ»¨ν…Œμ΄λ„ˆλŠ” μ½”λ“œμ˜ 처리 과정을 μœ„μž„ 받은 독립적인 μ‘΄μž¬μ΄λ‹€.

μ μ ˆν•œ 섀정을 ν•΄μ£Όλ©΄, ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μž‘μ„±ν•œ μ½”λ“œλ₯Ό μŠ€μŠ€λ‘œ μ°Έμ‘°ν•œ λ’€ μ•Œμ•„μ„œ 객체의 생성과 μ†Œλ©Έ(객체의 생애 μ£ΌκΈ°)을 κ΄€λ¦¬ν•œλ‹€.

DI(Dependency Injection)λž€?

DIλŠ” Dependency Injection의 μ€„μž„ 말둜, μ˜μ‘΄μ„± μ£Όμž…μ΄λΌλŠ” λœ»μ΄λ‹€. 각 클래슀의 의쑴 관계λ₯Ό Bean μ„€μ • 정보λ₯Ό λ°”νƒ•μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆκ°€ μžλ™μœΌλ‘œ μ£Όμž… ν•΄μ€€λ‹€.

DIλŠ” IoC ν”„λ‘œκ·Έλž˜λ° λͺ¨λΈμ„ κ΅¬ν˜„ν•˜λŠ” 방식 쀑 ν•˜λ‚˜ 이닀.

IoCκ°€ λ²”μš©μ μΈ 의미이기 λ•Œλ¬Έμ— μŠ€ν”„λ§μ΄ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯의 νŠΉμ§•μ„ λͺ…ν™•ν•˜κ²Œ μ„€λͺ…ν•˜μ§€ λͺ»ν•œλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μŠ€ν”„λ§μ΄ μ œκ³΅ν•˜λŠ” IoCλ°©μ‹μ˜ 핡심을 ν‘œν˜„ν•˜κΈ° μœ„ν•΄ μ˜μ‘΄μ„± μ£Όμž…(Dependency Injection)μ΄λΌλŠ” μš©μ–΄λ₯Ό μ‚¬μš©ν•˜κΈ° μ‹œμž‘ν–ˆλ‹€. (DIκ°€ μŠ€ν”„λ§μ—μ„œ μ‹œμž‘λœ κ°œλ…μ€ μ•„λ‹ˆλ‹€)

DI의 핡심은 μ™ΈλΆ€μ—μ„œ μ£Όμž…λ˜λŠ” λ‹€μ΄λ‚˜λ―Ήν•œ(동적인) 의쑴 관계 μ΄λ‹€. μŠ€ν”„λ§ DI의 3κ°€μ§€ 쑰건은 μ•„λž˜μ™€ κ°™λ‹€.

  • 클래슀 λͺ¨λΈμ΄λ‚˜ μ½”λ“œμ—λŠ” 의쑴 관계가 λ“œλŸ¬λ‚˜μ§€ μ•ŠλŠ”λ‹€.
  • λŸ°νƒ€μž„ μ‹œμ μ˜ 의쑴 κ΄€κ³„λŠ” μ»¨ν…Œμ΄λ„ˆλ‚˜ νŒ©ν† λ¦¬ 같은 μ‘΄μž¬κ°€ κ²°μ •ν•œλ‹€.
  • 의쑴 κ΄€κ³„λŠ” μ‚¬μš© ν•  μ˜€λΈŒμ νŠΈμ— λŒ€ν•œ 레퍼런슀λ₯Ό μ™ΈλΆ€μ—μ„œ 제곡(μ£Όμž…) ν•΄ 쀌으둜써 λ§Œλ“€μ–΄μ§„λ‹€.

클래슀 간에 의쑴 κ΄€κ³„λŠ” λŸ°νƒ€μž„ ν™˜κ²½μ—μ„œ λ™μ μœΌλ‘œ κ²°μ •λœλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μœ μ—°ν•œ μ½”λ“œλ‘œ 인해 κ°œλ°œμ— 어렀움이 적닀.

728x90