OCP
if-else λ¬Έμ μ
- λ³κ²½, νμ₯μ΄ λ μλ‘ μ½λκ° λ³΅μ‘ν΄μ§λ€.
- μ½λλ₯Ό μμ νκ±°λ μμ ν μμΉλ₯Ό μ°Ύλλ° μ μ μ€λκ±Έλ¦°λ€.
- μ€μλ‘ μΆκ°νμ§μκ³ λλ½νλ λΆλΆμ΄ μκΈΈ κ°λ₯μ±μ΄ μλ€.
μ¦, μ μ§λ³΄μκ° μ μ μ΄λ €μμ§λ€.
OCP κ°λ°© νμ μμΉ
μννΈμ¨μ΄μ κ΅¬μ± μμ(μ»΄ν¬λνΈ, ν΄λμ€, λͺ¨λ, ν¨μ)λ
νμ₯μ λν΄μλ κ°λ°©λμ΄μΌνμ§λ§, λ³κ²½μ λν΄μλ νμλμ΄μΌ νλ€.
κΈ°μ‘΄μ μ½λλ₯Ό λ³κ²½νμ§ μμΌλ©΄μ κΈ°λ₯μ μΆκ°ν μ μλλ‘ μ€κ³κ° λμ΄μΌνλ€
μ μ κΈ°λ₯μ νμ₯ν΄ λκ° λ, κΈ°μ‘΄μ μ½λλ₯Ό κ³μ λ³κ²½ν΄μΌνλ€λ©΄ κΈ°λ₯μ μΆκ°κ° μ μ νλ€μ΄μ§κΈ° λλ¬Έμ΄λ€.
κΈ°λ₯μ΄ μΆκ°, λ³κ²½λμ΄λ κΈ°μ‘΄ μ½λλ λ³κ²½λμ§ μλλ€. (νμ₯μ΄ μ½λ€)
OCP μ μ© λ°©λ²
1. μμμ μ΄μ©ν λ°©λ² - ν νλ¦Ώ λ©μλ ν¨ν΄
κΉ¨μ§κΈ° μ¬μ΄ μμ ν΄λμ€ λ¬Έμ
2. μ»΄ν¬μ§μ μ μ΄μ©ν λ°©λ² - μ λ΅ ν¨ν΄
μμ보λ€λ μ»΄ν¬μ§μ μ μΆμ²
1) λ³κ²½(νμ₯)λ κ²κ³Ό λ³νμ§ μμ κ²μ ꡬλΆ
λ³κ²½λλ λΆλΆμ μΈν°νμ΄μ€λ‘ μΆμΆ
2) μ΄ λ λͺ¨λμ΄ λ§λλ μ§μ μ μΈν°νμ΄μ€ μ μ
μΈν°νμ΄μ€μ μμ‘΄νλλ‘ μμ±(κΈ°λ₯ λ³κ²½μ μν΄ μ½λλ₯Ό μμ ν΄μΌνκΈ° λλ¬Έμ)
3) ꡬνμ μμ‘΄νκΈ°λ³΄λ€ μ μν μΈν°νμ΄μ€μ μμ‘΄νλλ‘ μ½λλ₯Ό μμ±
μκΈ°κ° μ§μ new μμ±μλ‘ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ , μΈλΆμμ μΈμ€ν΄μ€λ₯Ό λ°λ κ²μ μμ‘΄μ± μ£Όμ (Dependency Injection, DI)μ΄λΌκ³ νλ€.
Dependency Injection μμ‘΄μ± μ£Όμ
μννΈμ¨μ΄ κ°λ°μμ μμ‘΄μ± μ£Όμ μ κ°μ²΄κ° μμ‘΄νλ λ€λ₯Έ κ°μ²΄λ₯Ό λ°λ κ²μ΄λ€.
μμ‘΄μ± μ£Όμ μ μλλ κ°μ²΄μ μμ±κ³Ό μ¬μ©μ κ΄μ¬μ λΆλ¦¬νλ κ²μ΄λ€. → κ°λ μ±κ³Ό μ½λ μ¬μ¬μ©μ λμ¬μ€λ€.
μννΈμ¨μ΄ κ°λ°μμ μμ‘΄μ± μ£Όμ μ κ°μ²΄κ° μμ‘΄νλ λ€λ₯Έ κ°μ²΄λ₯Ό λ°λ κ²μ΄λ€.
μμ‘΄μ± μ£Όμ μ μλλ κ°μ²΄μ μμ±κ³Ό μ¬μ©μ κ΄μ¬μ λΆλ¦¬νλ κ²μ΄λ€. → κ°λ μ±κ³Ό μ½λ μ¬μ¬μ©μ λμ¬μ€λ€.
μμ‘΄μ± μ£Όμ μ μ μ© μ ν
- μμ±μ μ£Όμ : νμν μμ‘΄μ±μ λͺ¨λ ν¬ν¨νλ ν΄λμ€μ μμ±μλ₯Ό λ§λ€κ³ , κ·Έ μμ±μλ₯Ό ν΅ν΄ μμ‘΄μ± μ£Όμ
- setterλ₯Ό ν΅ν μ£Όμ : μμ‘΄μ±μ μ λ ₯λ°λ setter λ©μλλ₯Ό λ§λ€κ³ μ΄λ₯Ό ν΅ν΄ μμ‘΄μ± μ£Όμ
- μΈν°νμ΄μ€λ₯Ό ν΅ν μ£Όμ : μμ‘΄μ±μ μ£Όμ νλ ν¨μλ₯Ό ν¬ν¨ν μΈν°νμ΄μ€λ₯Ό μμ±νκ³ μ΄ μΈν°νμ΄μ€λ₯Ό ꡬννλλ‘ ν¨μΌλ‘μ¨ μ€ν μμ μμ‘΄μ± μ£Όμ
OCPλ₯Ό μ€μνκΈ° μν λμμΈ ν¨ν΄
μ λ΅ν¨ν΄
μ λ΅ν¨ν΄μ΄λ κΈ°μ‘΄μ μ½λ λ³κ²½μμ΄ νμλ₯Ό μμ λ‘κ² λ°κΏ μ μκ² ν΄μ£Όλ OCPλ₯Ό μ€μν λμμΈ ν¨ν΄
λμμΈ ν¨ν΄μ κ½
μ λ΅μ μ½κ² λ°κΏ μ μλλ‘ ν΄μ£Όλ λμμΈ ν¨ν΄
νμλ₯Ό ν΄λμ€λ‘ μΊ‘μνν΄ λμ μΌλ‘ νμλ₯Ό μμ λ‘κ² λ°κΏ μ μκ² ν΄μ£Όλ ν¨ν΄
μλ‘μ΄ κΈ°λ₯μ μΆκ°κ° κΈ°μ‘΄μ μ½λμ μν₯μ λ―ΈμΉμ§ λͺ»νκ² νλ―λ‘ OCPλ₯Ό λ§μ‘±
μ°Έκ³ μλ£
OCP(Open Closed Principle)μ΄λ?
nesoy.github.io