반응형
주석의 3가지 얼굴
- 잘 달린 주석은 그 어떤 정보보다 유용하다.
- 경솔하고 근거 없는 주석은 코드를 이해하기 어렵게 만든다.
- 오래되고 조잡한 주석은 거짓과 잘못된 정보를 퍼뜨려 해악을 미친다.
우리가 주석을 쓰는 이유?
코드로 의도를 표현하지 못해, 그러니까 '실패' 를 만회하기 위해 주석을 사용한다.
→ 주석을 달 때마다 자신에게 표현력이 없다는 사실을 푸념해야 마땅하다.
주석을 무시하는 이유
→ 거짓말을 하니까!
항상도 고의도 아니지만 너무 자주 거짓말을 하니까, 코드가 오래될수록 주석은 멀어진다.
코드는 변화하고 진화한다. 일부가 여기 저기 옮겨지고 나뉘고 갈라지고 합쳐진다.
불행하게도 주석이 코드를 따라갈 수 없다.
주석은 나쁜 코드를 보완하지 못한다
모듈을 짜고보니 짜임새가 엉망이고 알아먹기 어렵다
→ 지저분한 모듈이라는 것을 자각한다
→ 주석을 단다 (X)
⇒주석을 달지 말고 코드를 정리하자!
코드로 의도를 표현하라
1. 주석으로 의도를 담은 경우
// 직원에게 복지 혜택을 받을 자격이 있는지 검사한다.
if((employee.flags & HOURLY_FLAG) && (employee.age > 65)) ...
2. 코드로 의도를 표현한 경우
if(employee.isEligibleForFullBenefits()) ...
좋은 주석
- 법적인 주석
- 저작권 정보와 소유권 정보는 필요하고도 타당하다 ex) // Copyright (C)...
- 정보를 제공하는 주석
- 때로는 기본적인 정보를 주석으로 제공하면 편리하다. ex) // 테스트 중인 Responder 인스턴스를 반환한다. ⇒ 때때로 위와 같은 주석이 유용하다 할지라고 가능하다면 함수 이름에 정보를 담는 편이 좋다 (ex. responderBeingTested)
- 의도를 설명하는 주석
- 때대로 주석은 구현을 이해하게 도와주는 선을 넘어 결정에 깔린 의도까지 설명한다.
- 의미를 명료하게 밝히는 주석
- 모호한 인수나 반환 값은 그 의미를 읽기 좋게 표현하면 이해하기 쉬워진다.
- 결과를 경고하는 주석
- @Ignore 속성을 이용해 테스트 케이스를 꺼버린다. ex. @Ignore("실행이 너무 오래 걸린다.")
- TODO 주석
- TODO 주석으로 할 일을 주석으로 남겨두면 편하다.
- //TODO-MdM 현재 필요하지 않다 // 체크아웃 모델을 도입하면 함수가 필요 없다. protected VersionInfo makeVersion() throws Exception { return null; }
- 중요성을 강조하는 주석
- String listItemContent = match.group(3). trim(); // 여기서 trim은 정말 중요하다. trim 함수는 문자열에서 시작 공백을 제거한다. // 문자열에 시작 공백이 있으면 다른 문자열로 인식되기 때문이다.
- 공개 API에서 Javadocs
나쁜 주석
: 대다수 주석이 이 범주에 속한다.
- 허술한 코드를 지탱하거나, 엉성한 코드를 변명하거나, 미숙한 결정을 합리화하는 등 프로그래머가 주절거리는 독백
- 주절거리는 주석
- 특별한 이유 없이 의무감 혹은 하라고 해서 마지못해 다는 주석은 바이트만 낭비할 뿐 시간 낭비다.
- 같은 이야기를 중복하는 주석
- 코드보다 읽기 어려운 주석이라면 더 최악! 엔진 후드 열어볼 필요가 없다며 고객에게 아양 떠는 중고차 딜러랑 비슷!
- 오해할 여지가 있는 주석
- 의무적으로 다는 주석
- 아무 의미 없는 내용이 주석으로 담긴다.
- 이력을 기록하는 주석
- 형상관리가 있는데 굳이 왜?
- 있으나 마나 한 주석
- 전형적인 중복의 내용
- 너무나 당연한 사실을 언급하여 새로운 정보를 제공하지 못하는 주석
- 무서운 잡음
- 함수나 변수로 표현할 수 있다면 주석을 달지 마라
- 위치를 표시하는 주석
- 배너는 너무 자주 사용하지 않는다며 눈에 띄며 주의를 환기한다. 그러므로 반드시 필요할 때만, 아주 드물게 사용하는 편이 좋다. 배너를 남용하면 독자가 흔한 잡음으로 여겨 무시한다.
- 닫는 괄호에 다는 주석
- 중첩이 심하고 장황한 함수라면 의미가 있을지도 모르지만 작고 캡슐화된 함수에서는 잡음
- 공로를 돌리거나 저자를 표시하는 주석
- 형상 관리 시스템에 저장하자
- 주석으로 처리한 코드
- 형상 관리 시스템에 저장하다
- HTML 주석
- 최악!
- html 주석은 IDE에서 조차 읽기 어렵다.
- 최악!
- 전역 정보
- 주석을 달아야 한다면 근처에 있는 코드만 기술할 것
- 시스템의 전반적인 정보를 기술하지 마라.
- 포트 기본 값을 설정하는 코드가 변해도 아래 주석이 변하리라는 보장은 전혀 없다.
- 모호한 관계
- /* * 모든 필셀을 담을 만큼 충분한 배열로 시작한다 (여기에 필터 바이트를 더한다). * 그리고 헤더 정보를 위해 200바이트를 더한다. */ this.pngBytes = new byte[((this.width + 1) * this.height * 3) + 200]; 위의 주석과 아래 코드를 어떻게 매핑해서 이해해야 할까?
- 함수 헤더
- 짧은 함수는 긴 설명이 필요 없다. 짧고 한 가지만 수행하며 이름을 잘 붙인 함수가 주석으로 헤더를 추가한 함수보다 훨씬 좋다
- 비공개 코드에서 Javadocs
- 공개 API는 Javadocs가 유용하지만 공개하지 않을 코드라면 Javadocs는 쓸모가 없다.
- 시스템 내부에 속한 클래스와 함수에 Javadocs를 생성할 필요는 없다.
에라토스테네스의 체
반응형
'ETC > Books' 카테고리의 다른 글
[Clean Code] 예술에 대한 책을 읽는다고 예술가가 된다는 보장은 없다 (0) | 2021.11.03 |
---|---|
[Clean Code] 자신의 기억력을 자랑하지 마라 (1) | 2021.10.17 |
[Clean Code] 우리는 모두 author 이다. (0) | 2021.09.29 |
[Book] 자바 ORM 표준 JPA 프로그래밍 과 인연 (0) | 2021.09.27 |
[Clean Code] 사소한 곳에서 발휘하는 정직은 사소하지 않다 (0) | 2021.09.27 |