# [[Clean Code (클린 코드)]]

## 📌 Brief Summary
클린 코드(Clean Code)는 읽고 이해하기 쉬우며, 구조가 잘 잡혀 있고 유지보수를 염두에 두고 작성된 효율적인 코드를 의미합니다 [1]. 이는 단순히 컴퓨터에게 작업을 지시하는 것을 넘어, 다른 프로그래머에게 시스템의 의도를 명확하게 전달하기 위한 소통 수단입니다 [2]. 리팩토링을 통해 복잡한 코드(Dirty Code)를 클린 코드로 변환함으로써 기술 부채를 줄이고 버그 발생 가능성을 낮추며, 결과적으로 소프트웨어 개발의 경제성과 생산성을 높이는 것이 핵심 목적입니다 [1, 3, 4].

## 📖 Core Content

*   **클린 코드의 비즈니스 및 인지적 가치**
    클린 코드는 인간의 인지 부하를 줄여주어 버그를 더 빨리 발견하게 하고, 새로운 기능을 추가할 때 필요한 분석 시간을 단축시킵니다 [4]. 유지보수가 쉬워지기 때문에 장기적으로 개발 속도를 가속화하며, 비즈니스 가치를 더 빠르게 전달할 수 있는 토대가 됩니다 [4]. 반면 지저분한 코드는 기술 부채를 쌓게 하고 생산성을 떨어뜨리며, 코드를 변경하거나 이해하는 데 과도한 시간을 소모하게 만듭니다 [5, 6].

*   **가독성과 유지보수성의 본질**
    코드를 작성할 때는 다른 사람이 읽을 것을 전제로 작성해야 하며, "이해하기 쉬운 코드가 곧 유지보수하기 쉬운 코드"입니다 [2]. 짧은 코드가 항상 가독성이 좋은 것은 아니며, 코드 라인 수(LOC)를 유지보수성의 지표로 삼아서는 안 됩니다 [2, 7]. 명확한 의도를 보여주고 올바른 책임을 분리하는 제대로 된 '추상화'를 갖추는 것이 진정한 의미의 클린 코드입니다 [8, 9].

*   **리팩토링과 클린 코드의 관계**
    클린 코드를 달성하고 유지하는 지속적인 코드 위생 관리(code hygiene)의 핵심 실천 방법이 리팩토링입니다 [3, 10]. 로버트 C. 마틴(Robert C. Martin)의 저서 『Clean Code』가 '새로운 코드를 잘 작성하는 것'에 초점을 맞추고 있다면, 마틴 파울러(Martin Fowler)의 『Refactoring』은 '기존 코드를 개선하는 것'에 특화되어 있어 두 개념은 상호 보완적으로 작용합니다 [11]. 리팩토링은 함수 길이 단축, 모호한 변수명 변경, 중복 코드 제거, 조건문 단순화 등을 통해 혼란스러운 기존 코드를 클린 코드로 변환시킵니다 [12-14].

## ⚖️ Trade-offs & Caveats

*   **미학을 위한 리팩토링 지양**
    단순히 코드를 '예쁘게' 만들거나 '클린 코드'라는 미학적인 목적 자체만을 위해 리팩토링을 수행해서는 안 됩니다 [15, 16]. 생산적인 프로그래머는 행동 변경(기능 추가나 버그 수정)을 빠르게 수행하기 위한 경제적 목적에서 리팩토링을 하는 것이지, 아름다움을 위해 하는 것이 아닙니다 [15, 17].

*   **과도한 추상화와 분절화의 위험**
    가독성을 위한다는 명목으로 모든 것을 단일 호출 헬퍼 함수로 추출하거나 맹목적으로 원칙을 100% 적용하는 것은 오히려 코드를 읽기 어렵게 만들 수 있습니다 [8, 18, 19]. 무리하게 쪼개진 코드는 인지적 오버헤드나 미묘한 결합을 유발할 수 있습니다 [8, 20]. 

*   **잘못된 추상화 vs 코드 중복**
    "잘못된 추상화는 단순한 코드 중복보다 훨씬 더 큰 비용을 초래합니다" [9]. 단순히 코드가 비슷해 보인다고 해서 성급하게 억지 추상화를 만들어 내면, 향후 새로운 사용 사례를 덮어씌우기 위해 조건문이나 매개변수가 늘어나면서 코드가 더욱 지저분해지는 부작용을 겪게 됩니다 [9, 19]. 따라서 맹목적인 코드 정리보다는 '3의 법칙(Rule of Three)'을 적용하여 중복이 세 번 이상 발생할 때까지 기다린 후 공통점을 찾아 명확한 추상화를 도출하는 것이 권장됩니다 [21, 22].

---
*Last updated: 2026-05-03*