이 장을 읽기 전에
이 장은 07장: 주석은 실패를 의미한다에서 다룬 좋은 주석/나쁜 주석 구분을 실제 코드에 적용하는 실습이다. 07장을 먼저 읽었다는 전제로 진행한다.
| 수준 | 읽을 부분 | 핵심 목표 |
|---|---|---|
| 입문자 | 실습 1 전체 | 중복 주석을 식별하고 코드로 대체하는 절차를 익힌다 |
| 실무자 | 실습 2, “판단 기준” | 팀 코드 리뷰에서 “이 주석은 남겨야 하는가"를 즉시 판단한다 |
실습 1: 중복 주석 걷어내기
아래 주문 서비스 코드는 거의 모든 줄에 주석이 달려 있지만, 그 주석들 대부분은 바로 아래 코드가 말하는 내용을 그대로 반복한다.
| |
이 주석들을 하나씩 지워도 코드의 의미는 전혀 손실되지 않는다. if (o == null) return false;라는 코드 자체가 이미 “null이면 false를 반환한다"는 문장이기 때문이다. 07장에서 다룬 기준으로 판단하면, 이 주석들은 모두 “코드가 이미 말하는 것을 반복"하는 나쁜 주석에 해당한다.
| |
이 리팩토링은 단순히 주석을 지운 것이 아니라, 각 조건이 검증하는 내용을 isValidPendingOrder, confirmIfStockAvailable이라는 이름으로 승격시켰다. 그 결과 주석 없이도 processOrder 하나만 읽으면 전체 흐름(“유효성 검사 후 재고가 있으면 확정한다”)을 파악할 수 있다.
실습 2: 이력 기록 주석과 죽은 코드 정리
다음으로 흔한 패턴은 파일 상단에 변경 이력을 손으로 기록해 둔 주석과, 예전 구현을 지우지 못하고 주석 처리로 남겨둔 코드다.
| |
이 이력 주석은 git log --follow OrderService.java가 훨씬 정확하고 검색 가능한 형태로 같은 정보를 이미 제공하므로 삭제 대상이다. 주석 처리된 할인 로직도 마찬가지다 — 이 코드가 왜 비활성화됐는지, 다시 필요할지 아무도 확신할 수 없는 채로 남아 있으면 다음 사람은 지우기를 주저하게 된다. 만약 이 로직이 정말 나중에 필요할 수도 있다면, 주석 처리가 아니라 버전 관리 이력에 맡기고 코드에서는 완전히 삭제하는 것이 맞다.
판단 기준: 리뷰에서 주석을 남길지 즉시 판단하기
코드 리뷰 중 주석을 마주치면 다음 순서로 판단한다. 먼저 “이 주석을 지우면 코드의 의미가 달라지는가"를 묻는다. 달라지지 않는다면(단순 중복이라면) 지운다. 다음으로 “이 정보가 함수·변수 이름으로 옮겨질 수 있는가"를 묻는다. 옮겨질 수 있다면 이름을 개선하고 주석을 지운다. 마지막까지 남는 주석—법적 고지, 비직관적 설계 결정의 이유, 외부 시스템 제약—만 유지한다. 이 세 단계를 거치면 실습 1, 2에서 다룬 모든 사례가 “지운다” 또는 “코드로 옮긴다"로 처리되고, 정말 필요한 주석만 남는다는 것을 확인할 수 있다.
다음 장에서는
09장: 형식 맞추기와 코드 스타일에서는 주석을 넘어 코드 자체의 시각적 형식이 가독성에 미치는 영향을 다룬다.
평가 기준
- 중복 주석을 식별하고 이름 개선으로 대체할 수 있다.
- 이력 기록 주석과 주석 처리된 죽은 코드를 버전 관리 시스템으로 대체해야 하는 이유를 설명할 수 있다.
- “지운다 / 코드로 옮긴다 / 유지한다” 3단계 판단 절차를 실제 코드 리뷰에 적용할 수 있다.
참고 및 출처
- Martin, R. C. (2008). Clean Code: A Handbook of Agile Software Craftsmanship. Prentice Hall. 4장.
- Git 공식 문서 — git-log
![[Rust] Comprehensive Rust 무료 강의 정리 및 코스 구조](/post/2022-12-30-comprehensive-rust/wordcloud_hu_d1420ff38434cdb6.webp)
![[Hardware] LattePanda Alpha에 Ubuntu 16.04 LTS 설치 가이드](/post/2018-12-06-install-ubuntu-16.04-on-lattepanda/wordcloud_hu_fc536f8de2cbd4bf.webp)
![[SoftwareTesting] 소스 코드 테스트 커버리지 메트릭과 활용](/post/2024-08-19-test-coverage/wordcloud_hu_5f670d08f61abc22.webp)