Chapter 4 - Comments

나쁜 코드에 주석을 달지 마라. 새로 짜라.

주석은 나쁜 코드를 보완하지 못한다


  • 주석은 기껏해야 필요악, 필수가 아니다. (\(\Rightarrow\) 시패)
  • 우리의 의도대로 코드를 표현하지 못해 (실패를 만회하기 위해) 사용
  • 오래될수록 코드와 멀어져 고아가 된다
    • 개발자들은 주석을 유지보수 하지 않는다.
    • 리팩토링/여기저기 옮겨지면서 주석은 따라가지 못하는 경우가 부지기수
  • 진실은 오직 코드에만 존재한다. 부정확한 주석은 현혹하고 오도할 뿐
  • 표현력이 풍부하고 깔끔하며 주석이 거의 없는 코드가 좋다. 난장판을 설명하지 말고 치워라.

코드로 의도를 표현하라!


코드만으로 의드를 설명하기 어려운 경우에도 주석으로 해결하려는 대신 조금만 더 생각해보기

// 직원의 복지혜택 자격 확인
if( ( employee.flags & HOURLY_FLAG ) && ( employee.age > 65 ) )

vs

if( employee.isEligibleForFullBenefits() )

좋은 주석


  • 주석을 달지 않을 방법을 찾아낸 주석이 가장 좋다
  1. 법적인 주석: License (copyright)등 요즘은 IDE에서 코드로 표기해주긴 함
  2. 정보 제공: 반환값 (이름을 바꾸면 더 굳) or 정규표현 예시
  3. 의도 설명 결정에 깔린 의도까지 설명
  4. 의미를 명료하게 밝힘 이름 변경 불가한 라이브러리같은 경우 단, 검증할 방법이 없으니 더욱 신경써서 달기
  5. 결과를 경고: 오래 걸리기 때문에 해당 테케는 여유로울때 하기 등등
  6. TODO: //TODO, 떡칠금지
  7. 중요성을 강조
  8. 공개 API에서의 Javadocs

나쁜 주석


  • 대다수 주석 is classified here
  • 개발자의 독백으로 끝나는 경우가 많음
  1. 주절거리는 주석: 소통 불가, 결국엔 코드를 뜯어봐야 함
  2. 같은 이야기를 중복: 코드보다 읽거나 이해하는데 오래걸리는
  3. 오해의 여지
  4. 의무적인 주석: 모든 함수마다 javadcos 필요 X
  5. 변경이력 기록
  6. 있으나마나 한 주석: (너무나 당연해서) 개발자가 주석을 무시하는 습관이 생김
  7. 무서운 잡음 : javadocs 도 이렇게 될 수 있다
  8. 함수나 변수로 표현할 수 있다면 주석을 달지 않기
  9. 위치 표시 : 배너처럼 사용 /////////////////////////////, 쓸모 있을 때도 있지만 최대한 지양
  10. 닫는 괄호에 다는 주석: 차라리 함수를 줄이기
  11. 공로, 저자 표시: 소스관리 시스템이 해줌
  12. 주석으로 처리한 코드 : 나중에 지우기를 주저함 \(\rightarrow\) 코드가 쌓임. 마찬가리조 소스관리가 해줌
  13. HTML (이나 JSX)를 주석처리한 것
  14. 전역 정보: 근처에 있는 코드만 기술하기. 전체 default값 같은 건 기록X (유지보수 안될 가능성 높음)
  15. 너무 많은 정보
  16. 모호한 관계: 명확한 명사 동사 사용
  17. 함수 헤더: 차라리 이름으로 표기
  18. 비공개 코드에서 Javadocs