DevPoong 2022. 7. 5. 18:26

IOC(Inversion Of Control)

  • κΈ°μ‘΄ ν”„λ‘œκ·Έλž¨μ€ ν΄λΌμ΄μ–ΈνŠΈ κ΅¬ν˜„ 객체가 ν”„λ‘œκ·Έλž¨μ˜ μ œμ–΄ 흐름을 슀슀둜 μ‘°μ’…ν–ˆλ‹€. 즉, 슀슀둜 ν•„μš”ν•œ μ„œλ²„ κ΅¬ν˜„ 객체λ₯Ό 생성, μ—°κ²°, μ‹€ν–‰ν–ˆλ‹€λŠ” 말이닀.
  • ν•˜μ§€λ§Œ, μ œμ–΄ 흐름에 λŒ€ν•œ κΆŒν•œμ„ μ™ΈλΆ€ λ‹€λ₯Έ κ³³μ—μ„œ μ†Œμœ ν•˜κ³  μžˆμ–΄ μ™ΈλΆ€μ—μ„œ μ œμ–΄ 흐름을 κ΄€λ¦¬ν•΄μ£ΌλŠ” 것을 IOC μ œμ–΄μ˜ 역전이라고 ν•œλ‹€.
  • 이 κ°œλ…μ€ ν”„λ ˆμž„μ›Œν¬μ™€ 라이브러리λ₯Ό ꡬ뢄할 λ•Œ μ μš©ν•  수 μžˆλŠ”λ°
    • μž‘μ„±ν•œ μ½”λ“œλ₯Ό μ™ΈλΆ€μ—μ„œ μ œμ–΄λ₯Ό ν•΄μ£Όκ³  λŒ€μ‹  μ‹€ν–‰ν•˜λ©΄ ν”„λ ˆμž„μ›Œν¬
    • μž‘μ„±ν•œ μ½”λ“œλ₯Ό λ‚΄κ°€ 직접 μ œμ–΄μ˜ 흐름을 λ‹΄λ‹Ήν•˜λ©΄ 라이브러리

 


DI(Dependency Injection)

  • λ‹€ν˜•μ„± κ°œλ…μ„ μ΄μš©ν•΄μ„œ ν•œ Service 객체가 ν•œ μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄ν•˜κ³  μžˆμ„ λ•Œ Service 클래슀 λ‚΄μ—μ„œ μΈν„°νŽ˜μ΄μŠ€μ˜ κ΅¬ν˜„μ²΄λ₯Ό 지정해쀀닀면 λ‚˜μ€‘μ— 변경에 μ·¨μ•½ν•  것이닀.
  • κ·Έλž˜μ„œ μ™ΈλΆ€μ—μ„œ μ˜μ‘΄κ΄€κ³„λ₯Ό μ£Όμž…ν•œλ‹€λŠ” κ°œλ…μœΌλ‘œ κ΅¬ν˜„μ²΄λ₯Ό μ£Όμž…ν•΄μ€„ 수 μžˆλ‹€. 
  • 정적인 클래슀 의쑴 관계와 μ‹€ν–‰ μ‹œμ μ— 관계가 κ²°μ •λ˜λŠ” 동적인 객체(μΈμŠ€ν„΄μŠ€) 의쑴 관계 

 

(1) 정적 클래슀 μ˜μ‘΄κ΄€κ³„

  • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜μ§€ μ•Šμ•„λ„ ν΄λž˜μŠ€κ°€ μ‚¬μš©ν•˜λ €κ³  import ν•œ κ²ƒλ§Œ 봐도 μ˜μ‘΄κ΄€κ³„λ₯Ό μ‰½κ²Œ νŒλ‹¨ν•  수 μžˆλ‹€.
  •  ν•˜μ§€λ§Œ μ‹€μ œ μ–΄λ–€ κ΅¬ν˜„ 객체가 μ£Όμž…λ μ§€λŠ” μ•Œ 수 μ—†λ‹€

(2) 동적 클래슀 μ˜μ‘΄κ΄€κ³„

  • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ μ‹œμ μ— μ‹€μ œ κ΅¬ν˜„ 객체λ₯Ό μƒμ„±ν•˜κ³  ν΄λΌμ΄μ–ΈνŠΈμ— μ „λ‹¬ν•΄μ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ μ‹€μ œ μ˜μ‘΄κ΄€κ³„κ°€ μ—°κ²°λ˜λŠ” 것.
  • 이거λ₯Ό μ˜μ‘΄κ΄€κ³„ μ£Όμž… 이라고도 ν•  수 μžˆλ‹€.

 

  • μ˜μ‘΄κ΄€κ³„ μ£Όμž…μ„ μ‚¬μš©ν•˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ , ν΄λΌμ΄μ–ΈνŠΈκ°€ ν˜ΈμΆœν•˜λŠ” λŒ€μƒμ˜ νƒ€μž… μΈμŠ€ν„΄μŠ€λ₯Ό λ³€κ²½ν•  수 μžˆλ‹€.
  • 정적인 클래슀 μ˜μ‘΄κ΄€κ³„λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ , 동적인 객체 μΈμŠ€ν„΄μŠ€ μ˜μ‘΄κ΄€κ³„λ₯Ό μ‰½κ²Œ λ³€κ²½ κ°€λŠ₯ν•˜λ‹€.

IOC μ»¨ν…Œμ΄λ„ˆ( DI μ»¨ν…Œμ΄λ„ˆ )

  • 객체λ₯Ό μƒμ„±ν•˜κ³  κ΄€λ¦¬ν•˜λ©΄μ„œ μ˜μ‘΄κ΄€κ³„λ₯Ό μ—°κ²°ν•΄μ£ΌλŠ” 것
  • IOC μ»¨ν…Œμ΄λ„ˆ λ˜λŠ” DI μ»¨ν…Œμ΄λ„ˆλΌκ³  λΆ€λ₯Έλ‹€.
  • μ˜μ‘΄κ΄€κ³„ μ£Όμž…μ— μ΄ˆμ μ„ λ§žμΆ”λ©΄ DI μ»¨ν…Œμ΄λ„ˆλΌκ³  많이 λΆ€λ₯Έλ‹€.
  • μ–΄μ…ˆλΈ”λŸ¬, 였브젝트 νŒ©ν† λ¦¬λ‘œλ„ λΆ€λ₯Έλ‹€.