Skip to content

Latest commit

Β 

History

History
85 lines (54 loc) Β· 5.2 KB

DIP.md

File metadata and controls

85 lines (54 loc) Β· 5.2 KB

의쑴 관계 μ—­μ „ 원칙(DIP)

  • μƒμœ„ μˆ˜μ€€μ˜ λͺ¨λ“ˆμ€ ν•˜μœ„ μˆ˜μ€€μ˜ λͺ¨λ“ˆμ— μ˜μ‘΄ν•΄μ„œλŠ” μ•ˆλœλ‹€. λ‘˜ λͺ¨λ‘ 좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€.
  • μΆ”μƒν™”λŠ” ꡬ체적인 사항에 μ˜μ‘΄ν•΄μ„œλŠ” μ•ˆ λœλ‹€. ꡬ체적인 사항은 좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€.

μ—­μ „

  • 잘 μ„€κ³„λœ 객체 지ν–₯ ν”„λ‘œκ·Έλž¨μ˜ μ˜μ‘΄μ„± κ΅¬μ‘°λŠ” 전톡적인 절차적 방법에 μ˜ν•΄ 일반적으둜 λ§Œλ“€μ–΄μ§„ μ˜μ‘΄μ„± ꡬ쑰가 μ—­μ „λœ 것이닀.

μƒμœ„ μˆ˜μ€€ λͺ¨λ“ˆμ΄ ν•˜μœ„ μˆ˜μ€€ λͺ¨λ“ˆμ— μ˜μ‘΄ν•œλ‹€λ©΄?

  • μƒμœ„ μˆ˜μ€€μ˜ λͺ¨λ“ˆ : μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ€‘μš”ν•œ μ •μ±…μ˜μ‚¬κ²°μ • 및 업무 λͺ¨λΈμ„ ν¬ν•¨ν•˜κ³  μžˆλŠ” 것. (μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 본질)
  • ν•˜μœ„ μˆ˜μ€€ λͺ¨λ“ˆμ˜ 변경은 μƒμœ„ μˆ˜μ€€ λͺ¨λ“ˆμ— 직접적인 영ν–₯을 λ―ΈμΉ  수 μžˆλ‹€.
  • 영ν–₯을 미치게 λœλ‹€λ©΄ μƒμœ„ μˆ˜μ€€μ˜ λͺ¨λ“ˆμ΄ λ³€κ²½λ˜κΈ° ν•  μˆ˜λ„ μžˆλ‹€.

μ΄λŠ” 말도 μ•ˆλ˜λŠ” 상황이닀. ν•˜μœ„ μˆ˜μ€€μ˜ ꡬ체적 λͺ¨λ“ˆμ— 영ν–₯을 μ£Όμ–΄μ•Όν•˜λŠ” 것은 정책을 κ²°μ •ν•˜λŠ” μƒμœ„ μˆ˜μ€€μ˜ λͺ¨λ“ˆμ΄λ‹€.

μš°λ¦¬κ°€ μž¬μ‚¬μš©ν•˜κΈ° μ›ν•˜λŠ” 것은 μƒμœ„ μˆ˜μ€€μ˜ λͺ¨λ“ˆμ΄λ‹€.

  • μƒμœ„ μˆ˜μ€€μ˜ λͺ¨λ“ˆμ΄ ν•˜μœ„ μˆ˜μ€€μ˜ λͺ¨λ“ˆμ— 독립적이라면 이 μƒμœ„ μˆ˜μ€€μ˜ λͺ¨λ“ˆμ€ μ•„μ£Ό κ°„λ‹¨νžˆ μž¬μ‚¬μš© ν•  수 μžˆλ‹€.

λ ˆμ΄μ–΄ λ‚˜λˆ„κΈ°

  • λΆ€μΉ˜(Booch) : 잘 κ΅¬μ‘°ν™”λœ λͺ¨λ“  객체 지ν–₯ μ•„ν‚€ν…μ²˜λŠ” λ ˆμ΄μ–΄λ₯Ό λΆ„λͺ…ν•˜κ²Œ μ •μ˜ν–ˆλ‹€. μ—¬κΈ°μ„œ 각 λ ˆμ΄μ–΄λŠ” 잘 μ •μ˜λ˜κ³  μ œμ–΄λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 μΌκ΄€λœ μ„œλΉ„μŠ€μ˜ 집합을 μ œκ³΅ν•œλ‹€.

λ―Έμˆ™ν•œ λ ˆμ΄μ–΄

  • μ˜μ‘΄μ„±μ΄ 이행적(transitive)이닀.
  • μƒμœ„λ ˆμ΄μ–΄λŠ” ν•˜μœ„λ ˆμ΄μ–΄μ˜ λͺ¨λ“  변화에 λ―Όκ°ν•˜λ‹€.

μ—­μ „λœ λ ˆμ΄μ–΄

  • μƒμœ„λ ˆμ΄μ–΄λŠ” ν•„μš”λ‘œ ν•˜λŠ” μ„œλΉ„μŠ€μ— λŒ€ν•œ 좔상 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ„ μ–Έν•˜κ³  ν•˜μœ„λ ˆμ΄μ–΄λŠ” 이 좔상 μΈν„°νŽ˜μ΄μŠ€λ‘œλΆ€ν„° κ΅¬μ²΄ν™”λœλ‹€.
  • 결과적으둜 μƒμœ„λ ˆμ΄μ–΄λŠ” ν•˜μœ„λ ˆμ΄μ–΄μ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • λ°˜λŒ€λ‘œ ν•˜μœ„λ ˆμ΄μ–΄λŠ” μƒμœ„λ ˆμ΄μ–΄μ˜ 좔상 μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄ν•œλ‹€.

μ—­μ „μ΄λž€?

  • μ˜μ‘΄μ„±μ˜ λ°©ν–₯을 μ—­μ „μ‹œν‚¨λ‹€.
  • 즉 μƒμœ„λͺ¨λ“ˆμ΄ ν•˜μœ„λͺ¨λ“ˆμ„ μ˜μ‘΄ν•˜λŠ” λŒ€μ‹ , ν•˜μœ„λͺ¨λ“ˆμ΄ μƒμœ„λͺ¨λ“ˆ(μƒμœ„λͺ¨λ“ˆ 좔상 μΈν„°νŽ˜μ΄μŠ€)을 μ˜μ‘΄ν•˜κ²Œ λ§Œλ“œλŠ” 것.

μ†Œμœ κΆŒμ˜ μ—­μ „

  • 역전은 μ˜μ‘΄μ„± 뿐만 μ•„λ‹ˆλΌ, μΈν„°νŽ˜μ΄μŠ€ μ†Œμœ κΆŒμ— λŒ€ν•œ 것도 μ˜λ―Έν•œλ‹€.
  • 즉, DIPκ°€ 적용된 경우 μƒμœ„μˆ˜μ€€λͺ¨λ“ˆ(ν΄λΌμ΄μ–ΈνŠΈ)μ•ˆμ— μ„ μ–Έλ˜μ–΄ ν˜ΈμΆœλ˜λŠ” μΈν„°νŽ˜μ΄μŠ€λŠ” ν•˜μœ„μˆ˜μ€€λͺ¨λ“ˆ(μ„œλ²„)이 μ†Œμœ ν•˜λŠ” 것이 μ•„λ‹Œ, μƒμœ„μˆ˜μ€€λͺ¨λ“ˆ(ν΄λΌμ΄μ–ΈνŠΈ)이 μ†Œμœ ν•˜λŠ” 것이닀.
    • ν•˜μœ„μˆ˜μ€€λͺ¨λ“ˆ(μ„œλ²„)λŠ” μΈν„°νŽ˜μ΄μŠ€μ— νŒŒμƒν•΄ λ‚˜μ˜¨ 것이닀.
  • ν• λ¦¬μš°λ“œ(Hollywood) 원칙
    • λ¨Όμ € μ—°λ½ν•˜μ§€λ§ˆμ„Έμš”. 저희가 연락 λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.(Don't call us. we will call you)
    • ν•˜μœ„μˆ˜μ€€λͺ¨λ“ˆμ—μ„œ μƒμœ„μˆ˜μ€€λͺ¨λ“ˆμ„ 직접 ν˜ΈμΆœν•  수 μ—†κ²Œ ν•˜κ³ , μƒμœ„μˆ˜μ€€λͺ¨λ“ˆμ΄ ν•˜μœ„μˆ˜μ€€λͺ¨λ“ˆμ„ 직접 ν˜ΈμΆœν•˜λŠ” 것은 ν—ˆμš©ν•œλ‹€.

μ΄λ ‡κ²Œ μ˜μ‘΄μ„±μ„ μ—­μ „ μ‹œν‚΄μœΌλ‘œμ¨, μš°λ¦¬λŠ” μ’€ 더 μœ μ—°ν•˜κ³ , νŠΌνŠΌν•˜κ³ , 이동이 μ‰¬μš΄ ꡬ쑰λ₯Ό λ§Œλ“€μ–΄ λƒˆλ‹€.

좔상화에 μ˜μ‘΄ν•˜μž

κ°•λ ₯ν•œ DIP의 해석 : ν”„λ‘œκ·Έλž¨μ˜ λͺ¨λ“  κ΄€κ³„λŠ” κ΅¬μ²΄ν΄λž˜μŠ€κ°€ μ•„λ‹Œ, μ–΄λ–€ 좔상 ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ λ§Ίμ–΄μ Έμ•Ό ν•œλ‹€.

  • μ–΄λ–€ λ³€μˆ˜λ„ ꡬ체 ν΄λž˜μŠ€μ— λŒ€ν•œ ν¬μΈν„°λ‚˜ 참쑰값을 κ°€μ Έμ„  μ•ˆλœλ‹€.
  • μ–΄λ–€ ν΄λž˜μŠ€λ„ ꡬ체 ν΄λž˜μŠ€μ—μ„œ νŒŒμƒλ˜μ–΄μ„œλŠ” μ•ˆ λœλ‹€.
  • μ–΄λ–€ λ©”μ„œλ“œλ„ κ·Έ 기반 ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„λœ λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œ ν•΄μ„œλŠ” μ•ˆλœλ‹€.

이 κ²½ν—˜μ  μ ‘κ·Ό 방법은 λ‹€μ†Œ κ³ μ§€μ‹ν•˜λ‹€.

  1. 자주 λ°”λ€Œμ§€ μ•ŠλŠ” λΉ„νœ˜λ°œμ μΈ 클래슀(ex. String)μ—” μ μš©ν•  μ΄μœ κ°€ μ—†λ‹€. 직접 μ˜μ‘΄ν•˜λŠ” 것은 ν•΄κ°€ λ˜μ§€ μ•ŠλŠ”λ‹€.
  2. 휘발적인 ꡬ체 클래슀λ₯Ό λ³€κ²½ν•  경우, 이 변경은 좔상 μΈν„°νŽ˜μ΄μŠ€λ‘œ μ „νŒŒλ˜μ–΄ 뢄리 μƒνƒœλ₯Ό λ§κ°€λœ¨λ¦°λ‹€.

κ·ΈλŸ¬λ‚˜ ν΄λΌμ΄μ–ΈνŠΈ ν΄λž˜μŠ€κ°€ μžμ‹ μ΄ ν•„μš”λ‘œν•˜λŠ” μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ„ μ–Έν•œλ‹€λŠ” μž₯기적 관점을 νƒν•œλ‹€λ©΄, 이 μΈν„°νŽ˜μ΄μŠ€κ°€ λ³€κ²½λ˜λŠ” κ²½μš°λŠ” 였직 ν΄λΌμ΄μ–ΈνŠΈκ°€ 변경을 ν•„μš”λ‘œ ν•  λ•Œκ°€ λœλ‹€. 좔상 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” 클래슀의 변경은 ν΄λΌμ΄μ–ΈνŠΈμ— 영ν–₯을 주지 μ•ŠλŠ”λ‹€.

κ²°λ‘ 

절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

  • 정책이 ꡬ체적인 사항에 μ˜μ‘΄ν•˜λŠ” μ˜μ‘΄μ„± ꡬ쑰λ₯Ό λ§Œλ“ λ‹€.
  • 이런 경우 정책은 ꡬ체적인 μ‚¬ν•­μ˜ 변경에 따라 같이 λ³€ν•˜κΈ° λ•Œλ¬Έμ— λΆˆν–‰ν•œ 일이닀.

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

  • μ˜μ‘΄μ„± ꡬ쑰λ₯Ό μ—­μ „μ‹œμΌœ μ •μ±…κ³Ό ꡬ체적인 사항 λͺ¨λ‘ 좔상화에 μ˜μ‘΄ν•˜κ²Œ ν•œλ‹€.
  • λŒ€κ°œ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ†Œμœ ν•˜κ²Œ λ§Œλ“ λ‹€.

즉, ν”„λ‘œκ·Έλž¨μ˜ μ˜μ‘΄μ„±μ΄ μ—­μ „λ˜μ–΄ μžˆλ‹€λ©΄ 객체 지ν–₯ 섀계이며, μ—­μ „λ˜μ–΄ μžˆμ§€ μ•Šλ‹€λ©΄ 절차적 섀계닀.

  • μž¬μ‚¬μš© κ°€λŠ₯ν•œ ν”„λ ˆμž„μ›Œν¬λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ DIP의 μ μ ˆν•œ μ‘μš©μ€ ν•„μˆ˜λ‹€.
  • 좔상화와 ꡬ체적 사항이 μ„œλ‘œ λΆ„λ¦¬λ˜μ–΄ 있기 λ•Œλ¬Έμ—, 이 μ½”λ“œλŠ” μœ μ§€λ³΄μˆ˜ν•˜κΈ° 훨씬 쉽닀.