[개발도서] CleanCode 4장
CleanCode 책 4장을 읽고…
주석
주석은 나쁜 코드를 설명하기 위해 존재하는 것이 아니다. 깨끗한 코드를 기반으로 정말 필요한 곳에 작성해야 하는 것이다. 그리고 가장 최선은 주석을 달지 않고 이해할 수 있는 코드를 짜는 것이다.
1. 글자값을 하는 주석
-
법적인 주석
- 회사가 정립한 구현 표준에 맞춰 법적인 이유로 특정 주석을 넣으라고 명시하는 경우
- 예시 ) 각 소스 파일 첫머리에 주석으로 들어가는 저작권 정보와 소유권 정보
-
정보를 제공하는 주석
-
기본적인 정보를 주석으로 제공하면 편리해지는 경우
// 테스트 중인 Responder 인스턴스를 반환한다. protected abstract Responder responderInstance();
-
-
의도를 설명하는 주석
-
코드의 의도 설명을 통해 이해에 도움이 되는 경우
// 스레드 대량 생산하는 방법으로 어떻게든 경쟁 조건을 만들려 시도한다. for (int i = 0; i < 25000; i++) { WidgetBuilderThred widgetBuilderThread = new WidgetBuilderThread(widgetBuilder, text, parent, failFlag); Thread thread = new Thread(widgetBuilderThread); thread.start() }
-
-
의미를 명료하게 밝히는 주석
-
표준 및 외부 라이브러리의 변경 못하는 코드에 속하는 경우, 모호한 인수나 반환값의 의미를 표현하면 이해에 도움이 된다.
assertTrue(a.compareTo(a) == 0); // a = a assertTrue(a.compardTo(b) != 0); // a != b
-
-
결과를 경고하는 주석
-
다른 프로그래머에게 결과를 경고할 목적으로 사용하는 경우
// 여유 시간이 충분하지 않다면 실행하지 마시오 public void _testWithReallyBigFile() { writeLineToFile(1000000); ... }
-
-
TODO 주석
-
앞으로 할 일을 주석으로 남기는 경우
// TODO-MdM 현재 필요하지 않다. // 체크아웃 모델을 도입하면 함수가 필요 없다. protected VersionInfo makeVersion() thrwos Exception { return null; }
-
-
중요성을 강조하는 주석
-
중요하지 않게 여겨질 코드의 중요성을 강조하는 경우
String listItemContent = match.group(3).trim() // 여기서 trim은 정말 중요하다. trim 함수는 문자열에서 시작 공백을 제거한다. // 문자열에 시작 공백이 있으면 다른 문자열로 인식되기 때문이다.
-
2.글자값 못하는 주석
-
주절거리는 주석
-
이유 없이 의무감과 프로세스에 따라 마지못해 주석을 다는 경우
-
아래 주석의 경우 “기본값을 모두 메모리로 읽다”에는 주체와 시점 등 중요한 정보들이 제외되어 있다. 이 코드가 의미가 있는 경우 해석을 위해 다른 코드를 뒤져봐야하는 수고로움이 생긴다.
try { ... loadedProperties.load(propetiesStream); } catch(IOException e) { // 속성 파일이 없다면 기본값을 모두 메모리로 읽어 들었다는 의미다. }
-
-
같은 이야기를 중복하는 주석
-
코드로 이해 되는 것을 주석으로 다시 설명하는 경우
/** * 이 컴포넌트의 프로세스 지연값 */ protect int backgroundProcessorDelay = -1
-
-
의무적으로 다는 주석
-
문서화를 위해 모든 코드에 주석을 다는 경우
-
모든 변수에 의무적으로 주석을 다는 경우
/** * * @param title CD 제목 * @param author CD 저자 */ public void addCD(strint title, String author){ ... }
-
-
이력을 기록하는 주석
- 모듈이나 코드의 이력을 관리하기 위해 다는 주석
- Git같은 소스 코드 관리 시스템이 생겨 현재는 불필요한 주석이 됨
-
위치를 표시하는 주석
-
소스 파일에서 특정 위치를 표시할 때 쓰이는 주석
// Action //////////////////////////////////// protect int action{ ... }
-
-
주석으로 처리한 코드
-
필요없는 코드를 주석으로 남겨놓는 경우
// InputStream resultsStream = formatter.getResultStream(); // SteramReader reader = new StreamReader(resultsStream)
-
-
전역 정보를 표시한 주석
-
해당 코드의 내용 외에 시스템 전반적인 정보를 기술하는 경우
/** * 적합성 테스트가 동작하는 포트; 기본값은 <b>8082</b> * */ public void setFitnessPort(int fitnessPort) { this.fitnessPort = fitnessPort; }
-
3. 결론
주석 파트를 보면서 “주석으로 처리한 코드”, “위치를 표시하는 주석”을 많이 사용했던 내 코드를 돌아볼 수 있게 되었다. 그리고 “TODO 주석”과 “경고 주석”은 평소에 사용하지 않았던 것이기에 도움이 되는 주석에 대해서도 공부하는 기회가 되었다.