SOLID μμΉμ΄λ κ°μ²΄μ§ν₯ μ€κ³μμ μ§μΌμΌ ν 5κ°μ μννΈμ¨μ΄ κ°λ° μμΉ(SRP, OCP, LSP, ISP, DIP)μ λ§νλ€.
νλ‘κ·Έλλ¨Έκ° μκ°μ΄ μ§λλ μ μ§ λ³΄μμ νμ₯μ΄ μ¬μ΄ μμ€ν μ λ§λ€κ³ μ ν λ μ΄ μμΉλ€μ ν¨κ» μ μ©ν μ μλ€. SOLID μμΉλ€μ μννΈμ¨μ΄ μμ μμ νλ‘κ·Έλλ¨Έκ° μμ€ μ½λλ₯Ό μ½κΈ° μ½κ³ νμ₯νκΈ° μ½κ² λ λκΉμ§ μννΈμ¨μ΄ μμ€ μ½λλ₯Ό 리ν©ν°λ§νμ¬ μ½λ μ€λ©μ μ κ±°νκΈ° μν΄ μ μ©ν μ μλ μ§μΉ¨μ΄λ€. μ΄ μμΉλ€μ μ μμΌ μννΈμ¨μ΄ κ°λ°κ³Ό μ μμ μννΈμ¨μ΄ κ°λ°μ μ λ°μ μ λ΅μ μΌλΆλ€.
| κ°λ | |
|---|---|
| SRP (Single responsibility principle) | λ¨μΌ μ± μ μμΉβ ν ν΄λμ€λ νλμ μ± μ(κΈ°λ₯)λ§ κ°μ ΈμΌ νλ€ |
| OCP (Open/Closed principle) | κ°λ°©-νμ μμΉβ μννΈμ¨μ΄ μμλ νμ₯(μλ‘μ΄ κΈ°λ₯)μλ μ΄λ € μμΌλ λ³κ²½(μμ )μλ λ«ν μμ΄μΌ νλ€ |
| LSP (Liskov substitution principle) | 리μ€μ½ν μΉν μμΉ β νλ‘κ·Έλ¨μΒ κ°μ²΄λ νλ‘κ·Έλ¨μ μ νμ±μ κΉ¨λ¨λ¦¬μ§ μμΌλ©΄μ νμ νμ μ μΈμ€ν΄μ€λ‘ λ°κΏ μ μμ΄μΌ νλ€ = λΆλͺ¨ ν΄λμ€ κ°μ²΄λ μμ ν΄λμ€λ‘ λ체 κ°λ₯ν΄μΌ νλ€. |
| ISP (Interface segregation principle) | μΈν°νμ΄μ€ λΆλ¦¬ μμΉβ νΉμ ν΄λΌμ΄μΈνΈλ₯Ό μν μΈν°νμ΄μ€ μ¬λ¬ κ°κ° λ²μ© μΈν°νμ΄μ€ νλλ³΄λ€ λ«λ€ = μΈν°νμ΄μ€λ₯Ό μΈλΆννμ¬ ν΄λΌμ΄μΈνΈκ° νμνμ§ μλ μΈν°νμ΄μ€μ κΈ°λ₯μ μ€λ²λΌμ΄λ© νλ κ²μ νΌν΄μΌ νλ€ |
| DIP (Dependency inversion principle) | μμ‘΄κ΄κ³ μμ μμΉ β νλ‘κ·Έλλ¨Έλ βμΆμνμ μμ‘΄ν΄μΌμ§, ꡬ체νμ μμ‘΄νλ©΄ μλλ€.β μμ‘΄μ± μ£Όμ μ μ΄ μμΉμ λ°λ₯΄λ λ°©λ² μ€ νλλ€ = ν΄λμ€μ μμ ν΄λμ€ νΉμ μΆμνλ μΈν°νμ΄μ€μ μμ‘΄ν΄μΌ νλ€. |
βοΈ μ½λ μ€λ©(Code-Smell): μ»΄ν¨ν° νλ‘κ·Έλλ° μ½λμμ λ μ¬μ€ν λ¬Έμ λ₯Ό μΌμΌν¬ κ°λ₯μ±μ΄ μλ νλ‘κ·Έλ¨ μμ€ μ½λμ νΉμ§μ κ°λ¦¬ν¨λ€. μμ© νλ‘κ·Έλ¨ μμ€(μ€λ³΅ μ½λ, μ·κ±΄ ν¨κ³Ό λ±), ν΄λμ€ μμ€(λΌμ§ ν΄λμ€, κ²μΌλ₯Έ ν΄λμ€ λ±), λ©μλ μμ€(λ무 λ§μ λ§€κ°λ³μ, κΈ΄ λ©μλ λ±)μ μ½λ μ€λ©μ΄ μλ€.
π€ μν°ν¨ν΄ (anti-pattern): μννΈμ¨μ΄ 곡ν λΆμΌ μ©μ΄μ΄λ©°, μ€μ λ§μ΄ μ¬μ©λλ ν¨ν΄μ΄μ§λ§ λΉν¨μ¨μ μ΄κ±°λ λΉμμ°μ μΈ ν¨ν΄μ μλ―Ένλ€.