클린 코드란?
TIL: 클린 코드(Clean Code)란?
날짜: 2026-04-20 출처: Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship
1. 정의
클린 코드 = 읽기 쉽고, 이해하기 쉽고, 변경하기 쉬운 코드.
코드의 목적은 "동작하는 것"에서 끝나지 않고, 다른 개발자(미래의 나 포함)에게 의도를 명확히 전달하는 데 있다.
"코드를 읽는 시간과 쓰는 시간의 비율은 10:1을 훌쩍 넘는다." — Robert C. Martin
즉, 쓰기 편한 코드보다 읽기 편한 코드가 우선이다.
2. 왜 중요한가?
유지보수 비용의 대부분은 코드를 읽는 데 발생
나쁜 코드는 시간이 갈수록 생산성을 기하급수적으로 떨어뜨림 (Broken Window 이론)
리팩토링 · 협업 · 디버깅 모두 "읽기 쉬운 코드"가 전제 조건
결국 팀의 속도 문제이자 비즈니스 비용 문제
3. 핵심 원칙
3.1 의미 있는 이름 (Meaningful Names)
나쁜 예 | 좋은 예 | 이유 |
|---|---|---|
|
| 의도가 드러남 |
|
| 무엇을 반환하는지 명확 |
|
| 검색 · 구분 용이 |
이름에 의도를 담기
검색 가능한 이름 (한 글자 변수 지양)
발음 가능한 이름 (genymdhms ❌ → generationTimestamp ✅)
3.2 함수 (Functions)
작게: 한 함수는 한 가지만 (Single Responsibility)
이상적 크기: 한 화면 안에 들어올 정도 (~20줄 이내)
인자 수: 0개가 이상적, 3개 이상은 피하기
부수 효과(Side effect) 최소화
// Bad — 두 가지 일을 함
public void checkPasswordAndInitSession(String user, String pw) { ... }
// Good — 책임 분리
public boolean checkPassword(String user, String pw) { ... }
public void initializeSession(User user) { ... }
3.3 주석 (Comments)
좋은 주석: 코드로 표현 불가능한 의도 · 맥락 · 경고
나쁜 주석: 나쁜 코드를 변명하기 위한 주석
주석을 달기 전에 이름으로 설명할 수 없는지 먼저 고민
// Bad
// 사용자가 성인인지 확인
if (user.age >= 18) { ... }
// Good — 주석이 필요 없어짐
if (user.isAdult()) { ... }
3.4 형식 (Formatting)
관련된 코드는 가까이 배치
개념적 분리에는 빈 줄
한 줄은 화면 너비 이내
3.5 오류 처리 (Error Handling)
예외(Exception) 활용, return code 지양
null을 반환/인자로 전달하지 않기 → Optional · 빈 컬렉션 사용
비즈니스 로직과 에러 처리를 섞지 않기
4. 함께 따라오는 원칙
약어 | 의미 | 한 줄 요약 |
|---|---|---|
SRP | Single Responsibility Principle | 클래스 하나는 책임 하나만 |
DRY | Don't Repeat Yourself | 중복을 제거하라 |
KISS | Keep It Simple, Stupid | 단순하게 유지하라 |
YAGNI | You Ain't Gonna Need It | 필요해지면 그때 만들어라 |
5. 오늘의 Takeaway
코드는 쓰는 시간보다 읽는 시간이 훨씬 길다 → 가독성이 최우선
이름짓기가 클린 코드의 절반 이상을 차지한다
함수는 작게, 한 가지만 하게
주석을 달고 싶을 땐 먼저 코드 자체로 설명할 수 없는지 검토
TDD · BDD · DDD 같은 방법론도 결국 클린 코드를 만들기 위한 수단
6. 다음에 공부할 것
[ ] 리팩토링 기법 (Extract Method, Rename, Inline …)
[ ] SOLID 원칙 심화 (OCP · LSP · ISP · DIP)
[ ] Code Smell 카탈로그와 대응 전략
[ ] Clean Architecture (책 후속편)
댓글
댓글이 없습니다.
