Clean Code ν΄λ¦° μ½λ μ μμΌ μννΈμ¨μ΄ μ₯μΈ μ μ
- Robert C. Martin
0μ₯ λ€μ΄κ°λ©΄μ
κΉ¨λν μ½λλ₯Ό μμ±νλ λ°©λ²μ λ°°μ°κΈ° μ΄λ ΅λ€
λ¨μν μμΉκ³Ό ν¨ν΄μ μλ€κ³ κΉ¨λν μ½λκ° λμ€μ§ μλλ€. μ κ·Έλ¦° κ·Έλ¦Όκ³Ό κ·Έλ μ§ μμ κ·Έλ¦Όμ ꡬλΆν μ€ μλ€κ³ ν΄μ κ·Έλ¦Όμ μ 그릴 μ μλ κ² μλλ―μ΄
μ€μ€λ‘ μ°μ΅νκ³ μ€ν¨λ ν΄λ³΄λ©° κ³ μμ ν΄μΌ νλ€.
1μ₯ κΉ¨λν μ½λ
μ½λκ° μ‘΄μ¬ν리λΌ
μ½λλ λ μ΄μ λ¬Έμ κ° μλκ³ , λͺ¨λΈμ΄λ μꡬμ¬νμ μ§μ€ν΄μΌ νλ€κ³ μκ°νλ μ¬λλ μμ κ²μ΄λ€. μ½λλ₯Ό μλμΌλ‘ μμ±νλ μλκ° λ€κ°μ€λ©΄ νλ‘κ·Έλλ¨Έλ νμκ° μκ² λ κ²μ΄λ€. μ±GPT?
μ½λκ° μ¬λΌμ§ κ°λ§μ μ ν μλ€. μ? μ½λλ μꡬμ¬νμ μμΈν νννλ μλ¨μ΄κΈ° λλ¬Έ
κΈ°κ³κ° μ€νν μ λλ‘ μμΈνκ² μꡬμ¬νμ λͺ μνλ μμ μ΄ νλ‘κ·Έλλ°μ΄κ³ , λͺ μν κ²°κ³Όκ° λ°λ‘ μ½λμ΄λ€.
κΆκ·Ήμ μΌλ‘ μ½λλ μꡬμ¬νμ νννλ μΈμ΄μ΄λ€. μ΄λ μκ°μλ μ λ°ν ννμ΄ μꡬλλ©°, κ·Έλ¬λ―λ‘ μ½λλ νμ μ‘΄μ¬ν리λΌ.
λμ μ½λ
λμ μ½λμ λ°λͺ©μ‘ν κ³ μν κΈ°μ΅μ μ‘°κΈμ΄λΌλ νλ‘κ·Έλ¨μ μ§λ΄€λ€λ©΄ μμμ΄ κ²½ννμ κ²μ΄λ€.
μ°λ¦¬ λͺ¨λλ μμ μ΄ μ§ μ°λ κΈ° μ½λλ₯Ό λ³΄κ³ λμ€μ μλ³΄κ² λ€κ³ μκ°ν κ²½νλ μμ κ²μ΄λ€. μ λμκ°λ νλ‘κ·Έλ¨λ³΄λ€ λμκ°λ μ°λ κΈ°κ° μ’λ€κ³ μ€μ€λ‘λ₯Ό μλ‘νλ©΄μ λ§μ΄λ€. λ€μ λμμ λμ€μ μ 리νκ² λ€κ³ λ€μ§νμλ€.
λ₯΄λΈλμ λ²μΉ (Leblance's Law)
Later equals never. λμ€μ κ²°μ½ μ€μ§ μλλ€. νλ² μμ±ν μ°λ κΈ° μ½λλ₯Ό λμ€μ μμ νλ μΌμ κ²°μ½ μλ€.
λμ μ½λλ‘ μΉλ₯΄λ λκ°
λμ μ½λλ κ°λ° μλλ₯Ό ν¬κ² λ¨μ΄λ¨λ¦°λ€.
μ½λλ₯Ό κ³ μΉ λλ§λ€ μλ±ν κ³³μμ λ¬Έμ κ° μκΈ°κ³ , μκ°μ΄ μ§λ μλ‘ μ°λ κΈ° λλ―Έλ μ μ λμμ§κ³ κΉμ΄μ§κ³ 컀μ§λ€.
λμ μ½λκ° μμΌμλ‘ ν μμ°μ±μ λ¨μ΄μ§λ€.
μμ°μ±μ΄ λ¨μ΄μ§λ©΄ κ΄λ¦¬μΈ΅μ μμ°μ± μ¦λμ λν ν¬λ§μ νκ³ νλ‘μ νΈμ μΈλ ₯μ μΆκ°λ‘ ν¬μ νλ€.
λΈλ£©μ€μ λ²μΉ (Brooks' law)
νλ λλ¦ λΈλ£©μ€κ° μμ μ 1975λ μ μ γλ§¨λ¨Όμ€ λ―Έμ γ (The Mythical Man-Month)μμ "μ§μ²΄λλ μννΈμ¨μ΄ κ°λ° νλ‘μ νΈμ μΈλ ₯μ λνλ κ²μ κ°λ°μ λ¦μΆ λΏμ΄λ€"λΌκ³ μ£Όμ₯ν λ²μΉμ΄λ€.
μ μΈλ ₯μ μμ€ν μ€κ³μ λν μ‘°μκ° κΉμ§ μκ³ , μ€κ³ μλμ λ§λ λ³κ²½κ³Ό μ€κ³ μλμ λ°νλ λ³κ²½μ ꡬλΆνμ§ λͺ»νλ€. κ²°κ³Όμ μΌλ‘λ λμ μ½λλ₯Ό λ λ§μ΄ μμ°νλ€. κ·Έ λλΆμ μμ°μ±μ λλμ± λ¨μ΄μ Έ κ±°μ 0μ΄ λλ€.
μλν μ¬μ€κ³μ κΏ
κΈ°μ‘΄μ νμ€μ€λ¬μ΄ μ½λλ‘λ λ μ΄μ μΌνμ§ λͺ»νκ² λ€λ©° κ΄λ¦¬μΈ΅μ μ¬μ€κ³λ₯Ό μꡬνλ€.
μλ‘μ΄ νμ΄κ±° νμ΄ κ΅¬μ±λμ΄ κΈ°μ‘΄ μμ€ν κΈ°λ₯μ λͺ¨λ μ 곡νλ©°, μ μ§λ³΄μ λκ³ μλ κΈ°μ‘΄ μμ€ν μ κ°ν΄μ§λ λ³κ²½λ λͺ¨λ λ°λΌμ‘μμΌ νλ€.
μ΄λ¬ν μ¬μ€κ³ κ³Όμ μ μμ£Ό μ€λ«λμ μ΄μ΄μ§λ©°, μ μμ€ν μ΄ κΈ°μ‘΄ μμ€ν μ λ°λΌμ‘μ μ―€μ΄λ©΄ μ΄μ°½κΈ° νμ΄κ±° νμλ€μ λͺ¨λ λ λ¬κ³ μλ‘μ΄ νμλ€μ΄ μ μμ€ν μ μ€κ³νμκ³ μ£Όμ₯νλ€.
μ¬μ€κ³λ κ·Όλ³Έμ μΈ ν΄κ²° λ°©λ²μ΄ λμ§ λͺ»νλ€.
νλ
λμ μ½λμ μνμ μ΄ν΄νμ§ λͺ»νλ κ΄λ¦¬μ λ§μ κ·Έλλ‘ λ°λ₯΄λ νλμ μ λ¬Έκ°λ΅μ§ λͺ»ν νλμ΄λ€.
μμ΄μ λμ
κΈ°νμ λ§μΆκΈ° μν΄ νλ‘κ·Έλ¨μ 빨리 μμ±νλ€ λ³΄λ©΄ λμ μ½λλ₯Ό μμ°ν μλ°μ μλ€. νμ§λ§ μ€νλ € μλ§μ§μ°½μΈ μνλ‘ μΈν΄ μλκ° λ¦μ΄μ§κ³ , κ²°κ΅ κΈ°νμ λμΉλ€.
κΈ°νμ λ§μΆλ μ μΌν λ°©λ², λ€μ λ§ν΄ 빨리 κ°λ μ μΌν λ°©λ²μ μΈμ λ μ½λλ₯Ό κΉ¨λνκ² μ μ§νλ μ΅κ΄μ΄λ€.
κΉ¨λν μ½λλΌλ μμ ?
μ κ·Έλ¦° κ·Έλ¦Όμ ꡬλΆνλ λ₯λ ₯μ΄ κ·Έλ¦Όμ μ 그리λ λ₯λ ₯μ μλ κ²μ²λΌ, κΉ¨λν μ½λμ λμ μ½λλ₯Ό ꡬλΆν μ€ μλ€κ³ κΉ¨λν μ½λλ₯Ό μμ±ν μ€ μλ€λ λ»μ μλλ€.
κΉ¨λν μ½λλ?
- κΉ¨λν μ½λλ 보기μ μ¦κ±°μ΄ μ½λλ€.
- ν¨μ¨μ μΈ μ½λ : λ¨μν μλλ§μ μλ―Ένλ κ²μ΄ μλ, CPU μμκΉμ§ κ³ λ €ν μ½λ
- μ² μ ν μ€λ₯ μ²λ¦¬ - μΈμΈν μ¬νκΉμ§ κΌΌκΌΌνκ² μ κ²½μ¨μΌ νλ€.
- λ©λͺ¨λ¦¬ λμ, κ²½μ μν(race condition), μΌκ΄μ± μλ λͺ λͺ λ²
κ²½μ μν (Race condition)
μ€λͺ 곡ν λΆμΌμμ κ²½μ μνλ λ μ΄μμ μ λ ₯ λλ μ‘°μμ νμ΄λ°μ΄λ μμ λ±μ΄ κ²°κ΄κ°μ μν₯μ μ€ μ μλ μνλ₯Ό λ§νλ€. μ λ ₯ λ³νμ νμ΄λ°μ΄λ μμκ° μμκ³Ό λ€λ₯΄κ² μλνλ©΄ μ μμ μΈ κ²°κ³Όκ° λμ€μ§ μκ² λ μνμ΄ μλλ° μ΄λ₯Ό κ²½μ μνμ΄λΌκ³ νλ€.
- κΉ¨λν μ½λλ ν κ°μ§μ 'μ§μ€'νλ€.
- λμ μ½λλ λ무 λ§μ μΌμ νλ € μ μ°λ€κ° μλκ° λ€μμ΄κ³ λͺ©μ μ΄ νλ €μ§λ€.
- κ° ν¨μμ ν΄λμ€μ λͺ¨λμ μ£Όλ³ μν©μ ννΉλκ±°λ μ€μΌλμ§ μμ μ± νκΈΈλ§ κ±·λλ€.
- κΉ¨λν μ½λλ μ μ΄ λ¬Έμ₯μ²λΌ μ½νλ€. (κ°λ
μ±)
- λ¨μνκ³ μ§μ μ μΌλ‘ μμ±ν΄μΌ νλ€.
- μ€κ³μμ μλλ₯Ό μ¨κΈ°μ§ μκ³ , μ€νλ € λͺ μΎν μΆμνμ λ¨μν μ μ΄λ¬ΈμΌλ‘ κ°λνλ€.
- κΉ¨λν μ½λλ μμ±μκ° μλ μ¬λλ μ½κΈ° μ½κ³ κ³ μΉκΈ° μ½λ€.
- μ½κΈ° μ¬μ΄ μ½λμ κ³ μΉκΈ° μ¬μ΄ μ½λλ μμ°ν λ€λ₯΄λ€.
- ν μ€νΈ μΌμ΄μ€κ° μλ μ½λλ κΉ¨λν μ½λκ° μλλ€.
- 'μ΅μ'μ μμ‘΄μ±, 'μ΅μ'μ API : μμμλ‘ μ’λ€.
- κΉ¨λν μ½λλ μ£Όμ κΉκ² μμ±ν μ½λλ€.
- λκ΅°κ° μκ°μ λ€μ¬ κΉλνκ³ λ¨μ νκ² μ 리ν μ½λλ€. μΈμΈν μ¬νκΉμ§ κΌΌκΌΌνκ² μ κ²½μ°κ³ μ£Όμλ₯Ό κΈ°μΈμΈ μ½λλ€.
- μ€λ³΅ μ€μ΄κΈ°, ννλ ₯ λμ΄κΈ°, μ΄λ°λΆν° κ°λ¨ν μΆμν κ³ λ €νκΈ°
- μ½μΌλ©΄μ μ§μν λλ‘ λμκ°λ μ½λκ° κΉ¨λν μ½λλ€.
μ°λ¦¬λ μ μλ€
μ μμ λ μμ κ΄κ³μ²λΌ μ½λλ₯Ό μ§ μ¬λμ μ½λλ₯Ό μ½λ μ¬λμ λν΄ μ± μμ΄ μλ€.
μ μ½λλ₯Ό μ§λ©΄μ μ°λ¦¬λ λμμμ΄ κΈ°μ‘΄ μ½λλ₯Ό μ½λλ€. λ°λΌμ μ½κΈ° μ¬μ΄ μ½λκ° λ§€μ° μ€μνλ€.
κΈνλ€λ©΄, μλλ¬ λλ΄λ €λ©΄, μ½κ² μ§λ €λ©΄? μ½κΈ° μ½κ² λ§λ€λ©΄ λλ€.
보μ΄μ€μΉ΄μ°νΈ κ·μΉ
μΊ νμ₯μ μ²μ μμ λλ³΄λ€ λ κΉ¨λνκ² ν΄λκ³ λ λλΌ.
μ μ§ μ½λκ° μ λΆλ μλλ€. μκ°μ΄ μ§λλ μΈμ λ κΉ¨λνκ² μ μ§ν΄μΌ νλ€. μ§μμ μΈ κ°μ μ΄μΌλ§λ‘ μ λ¬Έκ° μ μ μ λ³Έμ§μ΄ μλλκ°?
ν리νκ³Ό μμΉ
κ°μ²΄ μ§ν₯ μ€κ³μ λ€μ― κ°μ§ μμΉ
- SRP(The Single Responsibility Principle): ν΄λμ€μλ λ¨ ν κ°μ§, λ¨ ν κ°μ§ λ³κ²½ μ΄μ λ§ μ‘΄μ¬ν΄μΌ νλ€.
- OCP(The Open Clused Principle): ν΄λμ€λ νμ₯μ μ΄λ € μμ΄μΌ νλ©° λ³κ²½μ λ«ν μμ΄μΌ νλ€.
- LSP(The Liskov Substitution Principle): μμλ°μ ν΄λμ€λ κΈ°μ΄ ν΄λμ€λ₯Ό λ체ν μ μμ΄μΌ νλ€.
- DIP(The Dependency Inversion Principle): μΆμνμ μμ‘΄ν΄μΌ νλ©°, ꡬ체νμ μμ‘΄νλ©΄ μ λλ€.
- ISP(The Interface Segregation Principle): ν΄λΌμ΄μΈνΈμ λ°μ νκ² μκ² μͺΌκ°μ§ μΈν°νμ΄μ€λ₯Ό μ μ§νλ€.
λλ μ
ν νλ‘μ νΈλ₯Ό μ§ννλ©΄μ λ€λ₯Έ νμλ€μ μ½λλ₯Ό μ½λ€ 보면 λ¬Ό νλ₯΄λ― μ½νλ μ½λκ° μλ λ°λ©΄, μ무리 μ½μ΄λ μ΄ν΄κ°μ§ μλ μ½λλ€λ λ§μ΄ λ§μ£Όνμλ€. μλ§ λ΄ μ½λλ λ€λ₯Έ μ¬λλ€μ΄ λ΄€μ λ μμμ΄ κ·Έλ¬μ κ²μ΄λ€. λκ° λ΄λ μ§κ΄μ μΌλ‘ μ΄ν΄ν μ μλ μ½λλ₯Ό μ§κ³ μΆμ΄μ μ΄ μ± μ μ½κΈ° μμνλ€.
μ μκ° λ§νλ― λ¨μν μ΄ μ± μ μλ νλ€κ³ ν΄μ λ°λ‘ κΉ¨λν μ½λλ₯Ό μμ±ν μλ μμ κ²μ΄λ€. νμ§λ§ μ΄ μ± μ κ³μν΄μ λ°λ³΅νλ©° 체ννκ³ , λ μ΄ μ± μ λ΄μ©μ λ°νμΌλ‘ μ λ°°, λλ£λ€κ³Ό μ½λ 리뷰λ₯Ό νκ³ μ견μ λλλ€ λ³΄λ©΄ μΈμ κ°λ μλ¦λ€μ΄ μ½λλ₯Ό μμ±ν μ μμ§ μμκΉ?
'π» Programming > κΈ°ν' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
VS Code μμ λ°μ΄ν, ν° λ°μ΄ν μ€μ νκΈ° (1) | 2024.01.07 |
---|---|
ROM, RAM, SSD, HDD (feat. νλ‘μ νΈ ν€μΌλ©λ¦¬) (1) | 2024.01.05 |
νλ‘ νΈμλ μΉκ°λ° κ³΅λΆ μ μ©ν μ¬μ΄νΈ μ 리 (0) | 2023.02.19 |