YunDaeHyeon
← Lab

πŸ€”μ˜μ‘΄μ„±(Dependency)의 μ •μ˜μ™€ μœ„ν—˜μ„±

μŠ€ν„°λ””2023.08.01
  • Spring

μ˜μ‘΄μ„±(Dependency)λž€?

Dependency(λ˜λŠ” μ˜μ‘΄μ„±)은 μ½”λ“œμ—μ„œ 두 λͺ¨λ“ˆκ°„μ˜ 연결이닀.
객체지ν–₯μ–Έμ–΄μ—μ„œλŠ” 두 ν΄λž˜μŠ€κ°„μ˜ 관계라고 λ§ν•œλ‹€.
일반적으둜 λ‘˜ 쀑 ν•˜λ‚˜κ°€ λ‹€λ₯Έ ν•˜λ‚˜λ₯Ό μ–΄λ– ν•œ μš©λ„λ₯Ό μœ„ν•΄ μ‚¬μš©ν•œλ‹€.


μ˜μ‘΄μ„±(Dependency)κ°€ μœ„ν—˜ν•œ 이유

두 λͺ¨λ“ˆμ΄ μ—°κ²°λ˜μ–΄ μžˆμ–΄ ν•˜λ‚˜μ˜ λͺ¨λ“ˆμ΄ λ°”λ€Œλ©΄ μ˜μ‘΄ν•œ λ‹€λ₯Έ λͺ¨λ“ˆκΉŒμ§€ 변경이 이루어지기 λ•Œλ¬Έμ— μ˜μ‘΄μ„±(Dependency)λŠ” μœ„ν—˜ν•˜λ‹€.

πŸ€” λ˜ν•œ, ν•œ λͺ¨λ“ˆμ—μ„œ λ‹€λ₯Έ λͺ¨λ“ˆμ„ μ‚¬μš©ν•œλ‹€κ³  헀을 λ•Œ ν…ŒμŠ€νŠΈλ₯Ό ν•œλ‹€ 가정을 ν•˜λ©΄ ν…ŒμŠ€νŠΈκ°€ μ‹€νŒ¨ν–ˆμ„ λ•Œ ν˜„μž¬ λͺ¨λ“ˆμ—μ„œμ˜ μ‹€νŒ¨μΈμ§€, μ˜μ‘΄ν•˜λŠ” λͺ¨λ“ˆμ˜ μ‹€νŒ¨μΈμ§€ μ•Œ 수 μ—†λ‹€.


μœ„ν—˜ν•œ Dependencyλ₯Ό ν•΄κ²°ν•˜λŠ” 방법

μ˜μ‘΄μ„± μ£Όμž…(Dependency Injection)을 μ‚¬μš©ν•œλ‹€.
'new'λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨λ“ˆ λ‚΄μ—μ„œ νŠΉμ • λͺ¨λ“ˆμ„ μ΄ˆκΈ°ν™”ν•˜μ§€ μ•ŠμœΌλ €λ©΄ 객체 생성을 λ‹€λ₯Έ κ³³μ—μ„œ ν•œ λ’€, μƒμ„±λœ 객체λ₯Ό μ°Έμ‘°ν•˜λ©΄ ν•΄κ²°λœλ‹€.

μ˜μ‘΄μ„± μ£Όμž…μ€ IoC(Inversion of Control)κ°œλ…μ„ λ°”νƒ•μœΌλ‘œ 이루어지기에 ν΄λž˜μŠ€κ°€ μ™ΈλΆ€λ‘œλΆ€ν„° μ˜μ‘΄μ„±(Dependency)λ₯Ό κ°€μ Έμ•Ό ν•œλ‹€.

Javaν΄λž˜μŠ€κ°€ newμ—°μ‚°μžλ₯Ό 톡해 λ‹€λ₯Έ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λ©΄ ν•΄λ‹Ή ν΄λž˜μŠ€μ™€ λ…λ¦½μ μœΌλ‘œ ν…ŒμŠ€νŠΈν•˜κ³  μ‚¬μš©ν•  수 μ—†μœΌλ©° 이λ₯Ό ν•˜λ“œμ’…μ†μ„±μ΄λΌκ³  ν•œλ‹€.

클래슀 μ™ΈλΆ€μ—μ„œ 쒅속성을 μ œκ³΅ν•œλ‹€λ©΄?

  1. 클래슀λ₯Ό μž¬μ‚¬μš© ν•  κ°€λŠ₯성을 높이고, λ‹€λ₯Έ ν΄λž˜μŠ€μ™€ λ…λ¦½μ μœΌλ‘œ 클래슀λ₯Ό ν…ŒμŠ€νŠΈ ν•  수 μžˆλ‹€λŠ” 이점이 μžˆλ‹€.
  2. λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 νŠΉμ • κ΅¬ν˜„μ΄ μ•„λ‹Œ, 클래슀λ₯Ό μƒμ„±ν•˜λŠ”λ° 맀우 νš¨κ³Όμ μ΄λ‹€.

μ˜μ‘΄μ„± μ£Όμž…(Dependency Injection)의 방법

  1. μƒμ„±μžλ₯Ό μ‚½μž…(Contructor)
  2. 멀버 λ³€μˆ˜(ν•„λ“œ) μ‚½μž…(Field)
  3. λ©”μ†Œλ“œ(νŒŒλΌλ―Έν„°) μ‚½μž…(Method)

JSR330에 λ”°λ₯Έ 쒅속성 μ£Όμž… μˆœμ„œ

πŸ’‘Spring 3.0을 μ‚¬μš©ν•œλ‹€λ©΄ JSR-330 μ–΄λ…Έν…Œμ΄μ…˜(μ˜μ‘΄μ„± μ—­μ „)의 지원을 받을 수 있으며 ν•΄λ‹Ή μ–΄λ…Έν…Œμ΄μ…˜λ“€μ€ μŠ€ν”„λ§ μ–΄λ…Έν…Œμ΄μ…˜λ“€κ³Ό 같은 λ°©λ²•μœΌλ‘œ μŠ€μΊ”λœλ‹€. ν•΄λ‹Ή μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” 클래슀 path에 κ΄€λ ¨ jar νŒŒμΌλ“€μ„ κ°€μ§€κ³  μžˆμ–΄μ•Ό ν•œλ‹€.

  1. μƒμ„±μž(Constructor)
  2. 멀버 λ³€μˆ˜(Field)
  3. λ©”μ†Œλ“œ(Method)

@Inject둜 μ£Όμ„μ²˜λ¦¬λœ λ©”μ†Œλ“œλ‚˜ ν•„λ“œκ°€ ν˜ΈμΆœλ˜λŠ” μˆœμ„œλŠ” JSR330에 μ˜ν•΄ μ •μ˜λ˜μ§€ μ•ŠλŠ”λ‹€.

  • @Moudle : ν•΄λ‹Ή μ–΄λ…Έν…Œμ΄μ…˜ 된 ν΄λž˜μŠ€λŠ” μ‚½μž… ν•  수 μžˆλŠ” 객체λ₯Ό 제곡되며 ν΄λž˜μŠ€λŠ” @Provides μ–΄λ…Έν…Œμ΄μ…˜ λ©”μ†Œλ“œλ₯Ό 톡해 μ •μ˜ν•œλ‹€. ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ return된 μ˜€λΈŒμ νŠΈλŠ” 쒅속성 μ‚½μž…μ— μ‚¬μš© κ°€λŠ₯ν•˜λ‹€. (@Module -> @Provides)
  • @Inject : μ˜μ‘΄μ„±μ„ μ •μ˜ν•˜λŠ”λ° μ‚¬μš©
  • @Component : ν•΄λ‹Ή μ–΄λ…Έν…Œμ΄μ…˜ μΈν„°νŽ˜μ΄μŠ€λŠ” 객체 제곡자(Module)와 의쑴 관계λ₯Ό ν‘œν˜„ν•˜λŠ” 객체 μ‚¬μ΄μ˜ 연결을 μ •μ˜ν•˜λ©° ν•΄λ‹Ή 연결에 λŒ€ν•œ ν΄λž˜μŠ€λŠ” Dagger에 μ˜ν•΄ μƒμ„±λœλ‹€.

Dependency Injectorλž€?

  • λͺ¨λ“ˆμ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μ œκ³΅ν•˜λ©° μ˜μ‘΄μ„±μ„ μ£Όμž…ν•˜λŠ” λͺ¨λ“ˆμ„ λ§ν•œλ‹€.

μ°Έκ³ 

tony-programming
NoodleMan