“좋은 코드는 주석이 필요 없다”는 말, 실무에서도 통할까?
안녕하세요, HeonCode 블로그입니다.
"좋은 코드는 스스로를 설명하기에 주석이 필요 없다"는 말, 개발자라면 한 번쯤 들어보셨을 겁니다. 클린 코드의 중요한 가치 중 하나로 여겨지며 많은 개발자들이 지향하는 목표이기도 합니다. 하지만 실제 업무, 특히 여러 동료와 함께하는 협업 환경에서 이 원칙을 곧이곧대로 적용하는 것이 과연 최선일까요?
이 글에서는 '주석 없는 코드'라는 이상과 '주석이 필요한 현실' 사이의 균형을 어떻게 잡아야 할지, 실무적인 관점에서 깊이 있게 다뤄보겠습니다.
1. "주석이 필요 없는 코드"의 진짜 의미
가장 먼저 짚고 넘어가야 할 것은, 이 명제가 단순히 "주석을 쓰지 마!"라는 뜻이 아니라는 점입니다. 이 말의 진짜 속뜻은 "주석을 달아야 할 만큼 복잡하고 이해하기 어려운 코드를 작성하지 말라"는 강력한 권고입니다.
나쁜 예시: 주석으로 코드를 설명하려는 경우
// 사용자의 나이가 20살 이상인지 확인한다 if (user.getAge() >= 20) { // ... }위와 같은 주석은 불필요합니다. 코드가 이미 모든 것을 말해주고 있기 때문이죠.
좋은 예시: 코드가 스스로를 설명하게 만드는 경우
if (user.isAdult()) { // ... }메서드 이름(
isAdult)을 통해 의도를 명확히 드러내면, 주석 없이도 코드를 쉽게 이해할 수 있습니다. 이것이 바로 '스스로를 설명하는 코드'의 핵심입니다. 변수명, 함수명, 클래스 구조를 명확하게 설계하는 것이 주석보다 우선되어야 합니다.
2. 하지만 실무에서는 '맥락'을 설명할 주석이 반드시 필요하다
코드가 '무엇(What)'을 하는지는 코드를 통해 설명할 수 있지만, '왜(Why)' 그렇게 작성되었는지는 설명하기 어려운 경우가 많습니다. 바로 이 지점에서 주석이 강력한 힘을 발휘합니다.
Case 1: 비즈니스 로직의 배경 설명
// 특별 할인 기간(2025/09/15 ~ 2025/09/20)에는 // VIP 등급이 아니더라도 무료 배송을 적용해야 한다는 기획팀 요청 사항 if (isSpecialDiscountPeriod || user.isVip()) { applyFreeShipping(); }isSpecialDiscountPeriod라는 변수만으로는 이 로직이 왜 존재하는지 완벽히 설명할 수 없습니다. 기획 배경이나 정책을 간략히 적어두면, 미래의 동료나 내가 코드를 수정할 때 큰 도움이 됩니다.Case 2: 기술적 제약이나 의도적 선택
# 성능 이슈로 인해 일반적인 JSON 파싱 대신 ujson 라이브러리를 사용함. # 기존 라이브러리 대비 약 30% 파싱 속도 향상. import ujson as json data = json.loads(response.text)왜 표준 라이브러리가 아닌 특정 라이브러리를 선택했는지에 대한 기술적 결정 사항을 주석으로 남기면, 다른 개발자가 코드를 임의로 수정하여 성능 저하를 일으키는 것을 방지할 수 있습니다.
3. 우리가 피해야 할 '나쁜 주석'의 유형
모든 주석이 좋은 것은 아닙니다. 오히려 코드의 가독성을 해치고 혼란을 가중시키는 '나쁜 주석'은 단호하게 피해야 합니다.
- 동어반복 주석: 코드를 그대로 번역한 것 같은 주석은 화면만 차지할 뿐 아무런 가치가 없습니다.
- 오해를 부르는 주석: 코드는 A 로직을 수행하는데, 주석은 B라고 설명하고 있다면 이는 재앙의 시작입니다. 코드를 수정할 때 주석도 반드시 함께 수정하는 습관이 중요합니다.
- 주석 처리된 코드: 더 이상 사용하지 않는 코드는 과감하게 삭제해야 합니다.
git이 모든 히스토리를 기억하고 있으므로, 주석으로 남겨두는 것은 혼란만 가중시킬 뿐입니다.
결론: 주석은 '실패의 산물'이 아닌 '소통의 도구'다
"좋은 코드는 주석이 필요 없다"는 말은 우리가 지향해야 할 이상적인 목표입니다. 주석을 달기 전에 항상 코드를 더 명확하게 개선할 방법은 없는지 먼저 고민해야 합니다.
하지만 모든 것을 코드로만 표현할 수는 없습니다. 비즈니스의 배경, 기술적인 트레이드오프, 그리고 동료 개발자를 위한 중요한 맥락은 '좋은 주석'을 통해 전달될 때 비로소 코드가 완성됩니다. 주석을 단순히 코드를 설명하는 부가적인 요소가 아닌, 팀원들과 소통하고 미래의 위험을 방지하는 중요한 '문서(Documentation)'로 생각하는 자세가 필요합니다.
결국, 클린 코드는 주석의 유무로 결정되는 것이 아니라, 코드와 주석이 각자의 역할을 충실히 수행하며 얼마나 쉽게 읽히고 유지보수될 수 있는지에 달려있습니다.
'개발 환경 & 팁 모음' 카테고리의 다른 글
| IntelliJ에서 디버깅 루틴 정리 – Breakpoint 설정부터 Watch, Evaluate까지 (0) | 2025.05.11 |
|---|---|
| IntelliJ 실무 활용 꿀팁 – 자주 쓰는 단축키와 커스터마이징 설정 정리 (2) | 2025.05.09 |
| Git 사용 시 자주 하는 실수 TOP 5 정리 (0) | 2025.05.07 |
| VSCode 2025의 AI 기반 리팩토링 기능으로 레거시 코드 현대화하기 (0) | 2025.04.24 |
| Visual Studio Code 숨은 기능 & 생산성 향상 팁 모음 (0) | 2025.04.20 |