πΎ [CS] SOLID μμΉ.
SOLID μμΉμ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μμ μ μ§λ³΄μμ±κ³Ό νμ₯μ±μ΄ μ’μ μννΈμ¨μ΄ μ€κ³λ₯Ό μν΄ μ μλ 5κ°μ§ μ€μν μ€κ³ μμΉμ λλ€.
μ΄ μμΉλ€μ λ°λ₯΄λ©΄ μ½λκ° λ ꡬ쑰νλκ³ , κ΄λ¦¬νκΈ° μ¬μμ§λ©°, μ μ°νκ² λ³νμ λμ²ν μ μμ΅λλ€.
SOLID μμΉμ λ€μκ³Ό κ°μ 5κ°μ§ μμΉμ 첫 κΈμλ₯Ό λ΄ μ½μ΄ μ λλ€.
1οΈβ£ λ¨μΌ μ± μ μμΉ(SRP: Single Responsibility Principle)
-
μ μ
- ν΄λμ€λ λ¨ νλμ μ± μλ§ κ°μ ΈμΌ νλ©°, νλμ κΈ°λ₯λ§ λ΄λΉν΄μΌ ν©λλ€.
-
μ€λͺ
- ν΄λμ€λ₯Ό λ³κ²½ν μ΄μ κ° νλλΏμ΄μ΄μΌ νλ€λ μλ―Έμ λλ€.
- μ¦, ν΄λμ€κ° ν κ°μ§ μν μ μ§μ€νκ³ κ·Έ μν κ³Ό κ΄λ ¨λ μ± μλ§μ κ°μ ΈμΌ ν©λλ€.
- μ΄λ κ² ν΄λμ€κ° λͺ ννκ³ μ΄ν΄νκΈ° μ¬μμ§λ©°, μ½λ μμ μ΄ νμν λ μν₯μ λ°λ λ²μκ° μμμ§λλ€.
-
μμ
- κ²μκΈμ κ΄λ¦¬νλ ν΄λμ€κ° κ²μκΈ μ μ₯, μμ , μμ λ± μ¬λ¬ κ°μ§ μν μ 맑λ λμ , κ° μν μ λ³λμ ν΄λμ€λ‘ λλλ λ°©μμ λλ€.
2οΈβ£ κ°λ°©-νμ μμΉ(OCP: Open/Close Principle)
-
μ μ
- ν΄λμ€λ νμ₯μ λν΄μλ μ΄λ € μμ΄μΌ νκ³ , μμ μ λν΄μλ λ«ν μμ΄μΌ ν©λλ€.
-
μ€λͺ
- μλ‘μ΄ κΈ°λ₯μ μΆκ°ν λ κΈ°μ‘΄μ μ½λλ λ³κ²½νμ§ μκ³ λ μμ€ν μ νμ₯ν μ μμ΄μΌ ν©λλ€.
- μ΄λ₯Ό μν΄ μμμ΄λ μΈν°νμ΄μ€λ₯Ό νμ©ν΄ κΈ°μ‘΄ ν΄λμ€μ κΈ°λ₯μ νμ₯νλ λ°©μμ΄ κΆμ₯λ©λλ€.
-
μμ
- μλ‘μ΄ κΈ°λ₯μ΄ νμν λ κΈ°μ‘΄ μ½λλ₯Ό μμ νμ§ μκ³ , ν΄λΉ κΈ°λ₯μ μμλ°κ±°λ μΈν°νμ΄μ€λ₯Ό ꡬννλ λ°©μμΌλ‘ μΆκ°νλ κ²μ΄ κ°λ°©-νμ μμΉμ λ§λ μ€κ³μ λλ€.
3οΈβ£ 리μ€μ½ν μΉν μμΉ(LSP: Liskov Substitution Principle)
-
μ μ
- μλΈνμ (νμ ν΄λμ€)μ μΈμ λ μμ μ κΈ°λ° νμ (μμ ν΄λμ€)μΌλ‘ κ΅μ²΄ν μ μμ΄μΌ ν©λλ€.
-
μ€λͺ
- νμ ν΄λμ€λ μμ ν΄λμ€μ κ·μ½μ μ€μν΄μΌ νλ©°, μμ ν΄λμ€λ₯Ό μ¬μ©νλ μ½λκ° νμ ν΄λμ€λ‘ λ체λλλΌλ μ μμ μΌλ‘ λμν΄μΌ ν©λλ€.
- μ΄λ λ€νμ±(polymorphism) κ°λ μ λ°λ₯΄λ κ°μ²΄μ§ν₯ μ€κ³μ μ€μν μμΉμ λλ€.
-
μμ
- λ§μ½
Animal
μ΄λΌλ μμ ν΄λμ€κ° μκ³ ,Bird
μFish
λΌλ νμ ν΄λμ€κ° μλ€λ©΄,Bird
μFish
λAnimal
νμ μΌλ‘ λ체λμ΄λ λ¬Έμ κ° μμ΄μΌ ν©λλ€.
- λ§μ½
4οΈβ£ μΈν°νμ΄μ€ λΆλ¦¬ μμΉ(ISP: Interface Segregation Principle)
-
μ μ
- ν΄λΌμ΄μΈνΈλ μμ μ΄ μ¬μ©νμ§ μλ λ©μλμ μμ‘΄νμ§ μμμΌ ν©λλ€.
-
μ€λͺ
- νλμ ν° μΈν°νμ΄μ€λ³΄λ€ μ¬λ¬ κ°μ μμ μΈν°νμ΄μ€λ‘ λΆλ¦¬νλ κ²μ΄ λ λ°λμ§ν©λλ€.
- μ΄λ κ² νλ©΄ ν΄λΌμ΄μΈνΈλ μμ μ΄ νμλ‘ νλ κΈ°λ₯λ§ μ νμ μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
- ν° μΈν°νμ΄μ€λ μ¬μ©νμ§ μλ λ©μλκΉμ§ ꡬνν΄μΌ νλ―λ‘ μ μ§λ³΄μκ° μ΄λ €μμ§ μ μμ΅λλ€.
-
μμ
- λ€μν μμ
μ μννλ
Workable
μΈν°νμ΄μ€λ₯Ό μ¬λ¬ κ° μμ μΈν°νμ΄μ€(Runnale
,Flyable
,Swimmable
)λ‘ λΆλ¦¬νμ¬ νμν κΈ°λ₯λ§ κ΅¬ννλλ‘ νλ κ²μ΄ μΈν°νμ΄μ€ λΆλ¦¬ μμΉμ λ§λ μ€κ³μ λλ€.
- λ€μν μμ
μ μννλ
5οΈβ£ μμ‘΄μ± μμ μμΉ(DIP: Dependaency Inversion Principle)
-
μ μ
- κ³ μμ€ λͺ¨λμ μ μμ€ λͺ¨λμ μμ‘΄ν΄μλ μ λκ³ , λ λ€ μΆμνλ κ²μ μμ‘΄ν΄μΌ ν©λλ€.
-
μ€λͺ
- κ³ μμ€ λͺ¨λ(λΉμ¦λμ€ λ‘μ§)μ μ μμ€ λͺ¨λ(μΈλΆ ꡬν)κ³Ό μ§μ μ μΌλ‘ μ°κ²°λμ§ μκ³ , μΆμνλ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ μλ‘ μνΈμμ©ν΄μΌ ν©λλ€.
- μ΄λ₯Ό ν΅ν΄ λ³νμ μ μ°νκ² λμ²ν μ μμΌλ©°, μ½λκ° λ νμ₯ κ°λ₯ν΄μ§λλ€.
- λν, μ½λμ μ¬μ¬μ©μ±λ λμμ§λλ€.
-
μμ
- μλΉμ€ κ³μΈ΅μ΄ μ μ₯μ κ³μΈ΅μ μμ‘΄νμ§ μκ³ , μ μ₯μ κ³μΈ΅μ μΆμνν μΈν°νμ΄μ€μ μμ‘΄νλλ‘ μ€κ³νλ λ°©μμ΄ μμ‘΄μ± μμ μμΉμ ν΄λΉν©λλ€.
- μ΄λ₯Ό ν΅ν΄ μ μ₯μ κ³μΈ΅μ ꡬν체λ₯Ό κ΅μ²΄νλλΌλ μλΉμ€ κ³μΈ΅μλ μν₯μ μ£Όμ§ μκ² λ©λλ€.
6οΈβ£ SOLID μμΉμ μ€μμ±
SOLID μμΉμ μ μ°νκ³ μ μ§λ³΄μνκΈ° μ¬μ΄ μμ€ν
μ λ§λ€κΈ° μν κΈ°λ³Έ κ°μ΄λ λΌμΈμ μ 곡ν©λλ€.
μ΄ μμΉλ€μ λ°λ¦μΌλ‘μ¨ μννΈμ¨μ΄λ λ€μκ³Ό κ°μ μ΄μ μ μ»μ΅λλ€.
1. λ³νμ μ μ°ν¨.
- μλ‘μ΄ μꡬ μ¬νμ΄λ κΈ°λ₯μ΄ μΆκ°λλλΌλ κΈ°μ‘΄ μ½λλ₯Ό μ΅μνμΌλ‘ μμ νκ±°λ μ ν μμ νμ§ μκ³ λ μμ€ν μ νμ₯ν μ μμ΅λλ€.
2. ν μ€νΈ μ©μ΄μ±.
- μ½λμ λͺ¨λνκ° μ μ΄λ£¨μ΄μ§λ©΄ ν μ€νΈ μ½λ μμ±μ΄ λ μ¬μμ§κ³ , κ°λ³μ μΈ μ λ ν μ΄μ€κ° κ°λ₯ν΄μ§λλ€.
3. μ½λ μ¬μ¬μ©μ±.
- SOLID μμΉμ λ°λΌ μμ±λ μ½λλ μ¬μ¬μ© κ°λ₯μ±μ΄ λμ΅λλ€.
4. νμ μ©μ΄μ±.
- μ¬λ¬ κ°λ°μκ° νμ ν λ μλ‘μ μ½λλ₯Ό μ΄ν΄νκ³ νμ₯νκΈ°κ° λ μ¬μμ§λλ€.
μ΄ μμΉλ€μ κ°μ²΄μ§ν₯ μ€κ³μ λͺ¨λ² μ¬λ‘λ₯Ό μ μνλ©°, μ½λλ₯Ό λ ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκ³ νμ₯νλ λ° ν° λμμ μ€λλ€.