
Design Patternμ μννΈμ¨μ΄ μ€κ³μμ λ°λ³΅ν΄μ λ±μ₯νλ λ¬Έμ λ₯Ό ν΄κ²°νλ κ²μ¦λ μ€κ³ λ°©μμ΄λ€.
νλ§λλ‘ λ§νλ©΄,
βμ΄ μν©μμλ λ³΄ν΅ μ΄λ κ² μ€κ³νλ©΄ μ½λκ° λ λ§κ°μ§λ€βλΌλ κ²½νμ μΆμ μ΄λ€.
| λ¨μ΄ | μλ―Έ |
|---|---|
| Design | μ€κ³ |
| Pattern | λ°λ³΅λλ νν |
μ¦, Design Patternμ
βλ°λ³΅μ μΌλ‘ λ°μνλ μ€κ³ λ¬Έμ μ λν μ¬μ¬μ© κ°λ₯ν μ€κ³ ν
νλ¦Ώβμ΄λ€.
μ½λ ν μ€μ λ¬Έμ κ° μλλΌ,
ꡬ쑰 Β· μ±
μ λΆλ¦¬ Β· νμ₯μ±μ λν μ΄μΌκΈ°λ€.
μλ¦Ό μμ€ν μ μλ‘ λ€μ΄λ³΄μ.
μ΄ μꡬμ¬νμ ν¨ν΄ μμ΄ μ²λ¦¬νλ©΄ λ³΄ν΅ μ΄λ° μνκ° λλ€.
Order ν΄λμ€ ββ μ΄λ©μΌ λ°μ‘ μ½λ ββ SMS λ°μ‘ μ½λ ββ μΉ΄μΉ΄μ€ λ°μ‘ μ½λ ββ μ¬λ λ°μ‘ μ½λ ββ if λ¬Έ νλ° ββ μμ±μ νλΌλ―Έν° νλ°
| λ¬Έμ | μ€λͺ |
|---|---|
| μμ μ μ°μ λ°μ | μλ¦Ό νλ μΆκ°ν λλ§λ€ Order ν΄λμ€ μμ |
| ν μ€νΈ μ§μ₯ | μ΄λ©μΌλ§ ν μ€νΈν΄λ μ 체 ν΄λμ€ νμ |
| μ¬μ¬μ© λΆκ° | SMS κΈ°λ₯λ§ λΌμ΄μ μΈ μ μμ |
| μ± μ κ³Όλ€ | Orderκ° λ무 λ§μ μν μ κ°μ§ |
π νμ₯ λΆκ°λ₯ν κ΅¬μ‘°κ° λ¨.
Observer Patternμ ν΅μ¬μ λ¬Έλ²μ΄λ ν΄λμ€ κ΅¬μ‘°κ° μλλ€.
βμ±
μμ μ΄λκΉμ§ μκ² ν κ²μΈκ°βμ λν μ¬κ³ λ°©μμ μ νμ΄λ€.
βλ³νκ° λ°μνμ λ,
κ·Έ λ³νλ₯Ό μμμΌ νλ λμλ€μκ²λ§ μλμΌλ‘ μλ €μ£Όμβ
λμμΈ ν¨ν΄μ΄ μμ λ, λλΆλΆμ μ½λλ μ΄λ κ² μμνλ€.
μ¦, Order ν΄λμ€ νλκ° λͺ¨λ μλ¦Ό λ°©μμ βλ€ μκ³ β μλ€.
Order ββ μ΄λ©μΌ λ°μ‘ μ½λ ββ SMS λ°μ‘ μ½λ ββ μΉ΄μΉ΄μ€ν‘ λ°μ‘ μ½λ ββ μ¬λ λ°μ‘ μ½λ ββ 쑰건문 (use_email, use_sms, use_kakao, ...)
μ΄ κ΅¬μ‘°μ μ§μ§ λ¬Έμ λ λ¨μν μ½λκ° κΈΈλ€λ κ² μλλ€.
μ¦, βλ³κ²½βμ΄ Orderλ₯Ό κ³μ λ§κ°λ¨λ¦°λ€.
Observer Patternμ μ μ©νλ©΄ μ§λ¬Έ μμ²΄κ° λ°λλ€.
βOrderκ° μλ¦Όμ μ΄λ»κ² 보λ΄μΌ νμ§?β β
βλκ° μ΄ λ³νλ₯Ό μμμΌ νμ§?β β
Orderλ μ΄μ μλ¦Ό λ°©μμ΄ λ¬΄μμΈμ§ μ ν λͺ¨λ₯Έλ€.
κ·Έμ βκ΄μ¬ μλ λμ λͺ©λ‘βλ§ κ΄λ¦¬νλ€.
ββββββββββββββββ
β Order β
β (Subject) β
ββββββββ¬ββββββββ
β notify()
ββββββββ΄βββββββββββββββββ
β Observers β
β (send() κ·μΉλ§ 곡μ ) β
β β
ββββββββββββββ ββββββββββββββ
β Email β β Kakao β
β Notifier β β Notifier β
ββββββββββββββ ββββββββββββββ
| κ΅¬λΆ | ν¨ν΄ λ―Έμ μ© | Observer Pattern μ μ© |
|---|---|---|
| μ μλ¦Ό μΆκ° | Order λ΄λΆ μμ | μ ν΄λμ€ μΆκ°λ§ |
| Order μ± μ | μ£Όλ¬Έ + μλ¦Ό μ λΆ | μ£Όλ¬Έλ§ λ΄λΉ |
| ν μ€νΈ | μ 체 ν΄λμ€ νμ | μλ¦Ό λ¨μ ν μ€νΈ κ°λ₯ |
| νμ₯μ± | μꡬμ¬ν μΆκ°κ° κ³΅ν¬ | μꡬμ¬ν μΆκ°κ° μΌμ |
κ·Έλμ Design Patternμ μ½λλ₯Ό μμκ² λ§λλ κΈ°μ μ΄ μλλΌ,
λ―Έλμ λ³κ²½ λΉμ©μ μ€μ΄κΈ° μν 보νμ΄λ€.
ν¨ν΄μ μΈμ°λ κ²λ³΄λ€,
βμ΄ μ½λμμ λ³κ²½μ΄ μ΄λλ‘ μ νλλκ°?βλ₯Ό λ¨Όμ 보μ.
| Before | After |
|---|---|
| κΈ°λ₯ μΆκ° = κΈ°μ‘΄ μ½λ μμ | κΈ°λ₯ μΆκ° = ν΄λμ€ μΆκ° |
| Orderκ° λͺ¨λ κ±Έ μ | Orderλ μλ¦Όμ λͺ¨λ¦ |
| if λ¬Έ νν | λ€νμ± νμ© |
| ν μ€νΈ μ΄λ €μ | κ°λ³ ν μ€νΈ κ°λ₯ |
π μ΄κ² λ°λ‘ νμ₯μλ μ΄λ € μκ³ , μμ μλ λ«ν μλ ꡬ쑰
(OCP: Open-Closed Principle)λ€.
λμ μ΄λ κ² μκ°ν΄μΌ νλ€.
βμ΄ μ½λκ° μ μ μ μμ νκΈ° μ΄λ €μμ§κΉ?β
βμ± μμ΄ ν κ³³μ λͺ°λ € μμ§ μμκ°?β
ν¨ν΄μ λͺ©μ μ΄ μλλΌ μλ¨μ΄λ€.
λ¬Έμ κ° λ³΄μΌ λ, ν΄κ²°μ±
μΌλ‘ κΊΌλ΄ μ°λ λꡬλ€.
| ν¨ν΄ | ν΅μ¬ κ°λ |
|---|---|
| Singleton | μμ€ν μ 체μμ νλλ§ μ‘΄μ¬νλ κ°μ²΄ |
| Factory | κ°μ²΄ μμ±μ ν κ³³μμ μ± μμ§ |
| Observer | μν λ³ν μλ¦Ό ꡬ쑰 |
| Strategy | μκ³ λ¦¬μ¦μ κ΅μ²΄ κ°λ₯νκ² λΆλ¦¬ |
| Decorator | κΈ°λ₯μ λ§λΆμ΄λ ꡬ쑰 |
ν¨ν΄μ μΈμ°λ κ² μλλΌ,
βμ, μ΄ μν©μ΄κ΅¬λβ νκ³ λ μ¬λ¦¬λ μκ°μ μλ―Έκ° μλ€.