Skip to content

Latest commit

Β 

History

History
42 lines (32 loc) Β· 2.18 KB

File metadata and controls

42 lines (32 loc) Β· 2.18 KB

Decorator Pattern

Decorator

  • μ£Όμ–΄μ§„ 상황 및 μš©λ„μ— 따라 μ–΄λ–€ 객체에 μ±…μž„μ„ λ§λΆ™μ΄λŠ” νŒ¨ν„΄μ΄λ‹€.
    • κΈ°λŠ₯ ν™•μž₯이 ν•„μš”ν•  λ•Œ μ„œλΈŒ ν΄λž˜μ‹± λŒ€μ‹  μ“Έ 수 μžˆλŠ” μœ μ—°ν•œ λŒ€μ•ˆμ΄ 될 수 μžˆλ‹€.
  • 객체의 결합을 톡해 κΈ°λŠ₯을 λ™μ μœΌλ‘œ μœ μ—°ν•˜κ²Œ ν™•μž₯ ν•  수 있게 ν•΄μ£ΌλŠ” νŒ¨ν„΄μ΄λ‹€.
    • κΈ°λ³Έ κΈ°λŠ₯에 μΆ”κ°€ν•  수 μžˆλŠ” κΈ°λŠ₯의 μ’…λ₯˜κ°€ λ§Žμ€ 경우 각 μΆ”κ°€ κΈ°λŠ₯을 Decorator 클래슀둜 μ •μ˜ ν•œ ν›„ ν•„μš”ν•œ Decorator 객체λ₯Ό μ‘°ν•©ν•˜μ—¬ μΆ”κ°€ κΈ°λŠ₯의 쑰합을 섀계 ν•œλ‹€.

μ‚¬μš©ν•˜λŠ” 경우

  • 객체의 νƒ€μž…κ³Ό 호좜 κ°€λŠ₯ν•œ ν•¨μˆ˜λ₯Ό κ·ΈλŒ€λ‘œ μœ μ§€ν•˜λ©΄μ„œ 객체에 μƒˆλ‘œμš΄ μ±…μž„μ„ μΆ”κ°€ν•  λ•Œ μ‚¬μš©ν•œλ‹€.
  • νƒˆλΆ€μ°© κ°€λŠ₯ν•œ μ±…μž„μ„ μ •μ˜ν•  λ•Œ μ‚¬μš©ν•œλ‹€.
  • 상속을 톡해 μ„œλΈŒν΄λž˜μŠ€λ₯Ό 계속 λ§Œλ“œλŠ” 방법이 λΉ„νš¨μœ¨μ μΌ λ•Œ μ‚¬μš©ν•œλ‹€.
    • μ‘°ν•©λ˜λŠ” 경우의 μˆ˜κ°€ 많으면 μ„œλΈŒν΄λž˜μŠ€ μˆ˜κ°€ 폭발적으둜 λŠ˜μ–΄λ‚  수 μžˆλ‹€.

κ΄€λ ¨ μš©μ–΄

Component

  • κΈ°λ³Έ κΈ°λŠ₯을 λœ»ν•˜λŠ” ConcreteComponent와 μΆ”κ°€ κΈ°λŠ₯을 λœ»ν•˜λŠ” Decorator의 곡톡 κΈ°λŠ₯을 μ •μ˜
  • ν΄λΌμ΄μ–ΈνŠΈλŠ” Componentλ₯Ό 톡해 μ‹€μ œ 객체λ₯Ό μ‚¬μš©ν•¨

ConcreteComponent

  • κΈ°λ³Έ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 클래슀

Decorator

  • λ§Žμ€ μˆ˜κ°€ μ‘΄μž¬ν•˜λŠ” ꡬ체적인 Decorator의 곡톡 κΈ°λŠ₯을 제곡

ConcreteDecorator

  • Decorator의 ν•˜μœ„ 클래슀둜 κΈ°λ³Έ κΈ°λŠ₯에 μΆ”κ°€λ˜λŠ” κ°œλ³„μ μΈ κΈ°λŠ₯을 λœ»ν•¨
  • ConcreteDecorator ν΄λž˜μŠ€λŠ” ConcreteComponent 객체에 λŒ€ν•œ μ°Έμ‘°κ°€ ν•„μš”ν•˜λ‹€.
    • Decorator ν΄λž˜μŠ€μ—μ„œ Component 클래슀둜의 합성을 톡해 ν‘œν˜„λœλ‹€.

μž₯점

  1. κΈ°μ‘΄ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³ λ„ Decorator νŒ¨ν„΄μ„ 톡해 행동을 ν™•μž₯μ‹œν‚¬ 수 μžˆλ‹€.
  2. ꡬ성과 μœ„μž„μ„ ν†΅ν•΄μ„œ 싀행쀑에 μƒˆλ‘œμš΄ 행동을 μΆ”κ°€ν•  수 μžˆλ‹€.
  3. OCP 원칙을 μœ„λ°˜ν•˜μ§€ μ•Šκ³  클래슀λ₯Ό ν™•μž₯ν•  수 μžˆλ‹€.

단점

  1. μ˜λ―Έμ—†λŠ” 객체듀이 λ„ˆλ¬΄ 많이 좔가될 수 μžˆλ‹€.
  2. Decoratorλ₯Ό λ„ˆλ¬΄ 많이 μ‚¬μš©ν•˜λ©΄ μ½”λ“œκ°€ λ³΅μž‘ν•΄μ§ˆ 수 μžˆλ‹€.

예제