Clean Code클린 코드
클린 코드(Clean Code)는 읽기 쉽고, 이해하기 쉬우며, 유지보수하기 좋은 코드를 작성하는 원칙과 실천 방법이다. Robert C. Martin(Uncle Bob)이 체계화했다.
핵심 원칙
의미 있는 이름
함수 단일 책임
주석보다 코드로 표현
SOLID 원칙
| 원칙 | 내용 |
|---|---|
| S — 단일 책임 | 클래스는 하나의 이유로만 변경 |
| O — 개방-폐쇄 | 확장에 열려, 수정에 닫혀 |
| L — 리스코프 치환 | 자식은 부모를 대체 가능 |
| I — 인터페이스 분리 | 작은 인터페이스 여럿 |
| D — 의존성 역전 | 추상화에 의존 |
클린 코드 필독서
코드 품질과 소프트웨어 장인정신을 다룬 개발자 필독서들이다.
Clean Code
Robert C. Martin (Uncle Bob) | 2008
클린 코드의 바이블로 불리는 책. 변수·함수·클래스 명명법, 주석 최소화, 함수 단일 책임, 오류 처리, 단위 테스트 작성까지 실전 중심으로 설명한다.
| 핵심 원칙 | 내용 |
|---|---|
| 의미 있는 이름 | 의도를 드러내는 이름 사용, 약어·단일 문자 지양 |
| 작은 함수 | 함수는 한 가지 일만 해야 한다 (SRP) |
| 주석 최소화 | 코드 자체가 설명되어야 한다. 좋은 이름이 최고의 주석 |
| 오류 처리 | 예외를 사용하고 오류 코드를 리턴하지 말 것 |
| 테스트 | F.I.R.S.T 원칙 (Fast·Independent·Repeatable·Self-validating·Timely) |
"코드는 처음에 작동하게 만들고, 그다음 올바르게 만들어라."
The Pragmatic Programmer
Andrew Hunt, David Thomas | 1999 (20주년 개정판 2019)
"실용주의 프로그래머"는 코드보다 개발자의 사고방식과 태도에 집중한다. DRY(Do not Repeat Yourself), 깨진 창문 이론, 트레이서 탄 개발, 도메인 언어 등 지금도 유효한 원칙들을 제시한다.
- •DRY — 모든 지식은 시스템 안에서 단 하나의 권위 있는 표현을 가져야 한다
- •깨진 창문 이론 — 나쁜 코드를 방치하면 전체가 썩는다. 발견 즉시 수정
- •직교성 — 무관한 것들이 서로 영향을 미치지 않도록 설계
- •계약에 의한 설계 — 사전조건·사후조건·불변조건을 명확히
Refactoring
Martin Fowler | 1999 (2판 2018)
레거시 코드를 안전하게 개선하는 리팩터링 기법 카탈로그의 정석. 2판은 JavaScript 예제로 업데이트됐다.
| 대표 리팩터링 기법 | 설명 |
|---|---|
| Extract Function | 긴 함수의 일부를 독립된 함수로 분리 |
| Rename Variable | 의도를 드러내는 이름으로 교체 |
| Replace Temp with Query | 임시 변수를 함수 호출로 대체 |
| Introduce Parameter Object | 여러 매개변수를 객체로 묶기 |
| Replace Conditional with Polymorphism | 조건문을 다형성으로 대체 |
"리팩터링은 소프트웨어의 외부 동작을 바꾸지 않으면서 내부 구조를 개선하는 과정이다."
A Philosophy of Software Design
John Ousterhout | 2018
스탠퍼드 교수이자 Tcl 언어 설계자인 Ousterhout가 제시하는 복잡성 관리 철학. 많은 책이 "작게 만들어라"를 강조하는 것과 달리, 너무 잘게 쪼개는 것도 복잡성을 높인다고 주장한다.
- •복잡성의 원인 — 의존성(Dependency)과 모호성(Obscurity)
- •깊은 모듈 — 인터페이스는 단순하되 구현은 충분히 깊어야 한다
- •얕은 모듈의 함정 — 너무 작은 클래스·함수는 인터페이스 복잡성을 오히려 증가시킴
- •전술적 vs 전략적 프로그래밍 — 지금 당장 작동하게 vs 미래를 고려한 설계
Code Complete 2
Steve McConnell | 2004
900페이지가 넘는 방대한 소프트웨어 구현 백과사전. 변수·루틴·클래스 설계부터 디버깅·테스팅·코드 튜닝까지 모든 실전 기법을 다룬다. 다소 고전이지만 구현 수준의 결정에 있어 여전히 최고의 레퍼런스다.
Working Effectively with Legacy Code
Michael Feathers | 2004
테스트가 없는 레거시 코드에 안전하게 변경을 가하는 방법을 다룬 책. "테스트 없는 코드는 레거시 코드다"라는 정의로 시작한다.
- •봉합(Seam) — 코드 동작을 변경할 수 있는 접점 찾기
- •특성 테스트 — 기존 동작을 먼저 테스트로 고정한 뒤 리팩터링
- •실제 현업에서 레거시를 다루는 개발자에게 가장 실용적인 책
The Software Craftsman
Sandro Mancuso | 2014
소프트웨어 장인정신(Software Craftsmanship)을 직업 철학으로 정리한 책. 단순히 코드를 잘 짜는 것을 넘어 프로페셔널리즘과 지속적인 학습을 강조한다.
"우리는 단순히 코드를 작성하는 사람이 아니라, 소프트웨어 장인이어야 한다."
관련 개념
- •TDD — 클린 코드의 실천 방법
- •객체지향 프로그래밍 — 클린 코드의 기반
참고문헌
- •Martin, R.C. Clean Code (2008)
- •Hunt, A. & Thomas, D. The Pragmatic Programmer (1999, 20th Anniversary Ed. 2019)
- •Fowler, M. Refactoring: Improving the Design of Existing Code (1999, 2nd Ed. 2018)
- •Ousterhout, J. A Philosophy of Software Design (2018)
- •McConnell, S. Code Complete, 2nd Ed. (2004)
- •Feathers, M. Working Effectively with Legacy Code (2004)
- •Mancuso, S. The Software Craftsman (2014)
