////
Search
Duplicate
😅

32. 스스로를 설명하는 코드

이 장에서는 문서화에 대한 전체적인 내용을 살펴보고 주석이라는 문서화 형태의 일종을 알아본다.
코드를 작성할 때, 당신의 코드를 유지보수하는 사람이 당신이 어디사는지 알고있는 싸이코패스라고 생각하면서 작성해라. - 익명

1. 외부 문서

외부 문서는 문제 정의와 요구사항, 아키텍처의 문서와 비교했을 때 상대적으로 추상화 수준이 높은 경향이 있다.
단위 개발 일지
단위 개발 일지 또는 소프트웨어 개발 일지라고도 하며 이는 개발자가 구현 중에 사용했던 기록이 담겨 있는 비공식적인 문서다.
단위는 일반적으로 하나의 클래스를 의미하며 패키지나 컴포넌트를 의미할 수도 있다.
상세 설계 문서
상세 설계 문서는 하위 추상화 수준을 가지는 설계 문서다.
이 문서는 클래스 수준 또는 메소드 수준의 설계 시 결정 사항과 고려했던 대안, 그리고 최종 접근 방법을 선택한 이유를 기술한다.
때때로 공식 문서에 포함되기도 하며 일반적으로 상세 설계를 구현과 분리하여 생각한다.

2. 문서화를 위한 프로그래밍 스타일

내부 문서는 프로그램 코드 안에 존재한다. 이는 소스 명령문 수준의 가장 상세한 문서다.
코드 수준의 문서에 가장 크게 기여하는 것은 주석이 아니라 좋은 프로그래밍 스타일이다.
스타일에는 좋은 프로그램 구조, 직관적이고 이해하기 쉬운 접근 방법의 사용, 좋은 변수 이름, 좋은 메소드 이름, 상수 사용, 명확한 배치, 제어 흐름과 데이터 구조 복잡성의 최소화가 포함된다.
즉 프로그래밍 스타일을 향상시키는 것만으로도 문서로 전달해야할 많은 내용들을 생략할 수 있는 의미를 전달할 수 있다.

3. 주석을 작성할 것인가? 작성하지 않을 것인가?

주석은 코드의 추상화 수준보다는 조금 더 높은 수준에서 개발자가 구현하고자 하는 의미를 설명해야 한다.
코드가 하는 일을 그대로 나열하는 형태의 주석은 좋은 형태의 주석이 아니다.
주석을 작성하면서 내가 작성한 코드가 무슨 일을 하는지 좀 더 진지하게 생각해볼 수 있다.

4. 효과적인 주석을 위한 핵심 사항

주석의 종류

주석은 보통 여섯 가지 종류로 분류할 수 있다.
코드 반복
코드가 하는 일을 말만 바꾸어 다시 말하는 주석이다. 추가적인 정보를 제공하지는 않고 읽어야 하는 코드의 양만 늘린다.
코드 설명
일반적으로 복잡하거나 미묘한 코드를 설명하는 데 사용되는 주석이다. 코드가 복잡하다면 유용하지만 일반적으로는 코드가 혼란스럽게 작성되었기 때문이다.
코드가 설명이 필요할 정도로 복잡하다면 주석을 다는 것보다는 코드를 향상시키는 것이 대부분의 경우 더 낫다.
코드 자체를 명확하게 만들고 나서 개요나 의도를 나타내는 주석을 사용하도록 한다.
코드 표시 기능
to do 태그를 이용하여 뭔가를 표시할 수 있다.
코드 요약
코드를 요약하는 주석은 그저 요약만 한다. 이러한 주석은 코드를 더 빠르게 살펴볼 수 있어 코드 반복보다는 훨씬 가치있다.
요약 주석은 코드를 작성한 사람보다는 다른 사람이 코드를 유지보수할 때 특히 유용하다.
코드의 의도를 설명
의도 수준의 주석은 코드의 목적을 설명한다. 이는 해결책 수준보다는 문제 수준에서 사용된다.
현재 직원 정보를 가져온다. → 코드의 의도를 설명
employeeRecord 객체를 갱신한다. → 해결책에 대한 요약 주석
코드 자체로는 표현할 수 없는 정보
저작권 설명, 기밀 사항, 버전 번호 등의 세부사 항들은 코드 자체로 표현할 수 없다.
완성된 코드에 허용되는 주석의 종류는 코드로 표현할 수 없는 정보와 의도 주석, 요약 주석이다.

효율적인 주석 작성

주석을 작성하는 스타일이 오래 걸리거나 장황한 경우가 있다. 그렇다면 새로운 스타일을 찾아라.
많은 작업이 필요한 주석 작성 스타일은 유지보수할 때 골치 아프다.
프로그램이 무엇을 하는지 설명하기 위한 단어가 쉽게 떠오르지 않아서 주석을 작성하기 어렵다.
이것은 대개 개발자가 프로그램이 하는 일을 제대로 이해하지 못한다는 신호다.
다음은 주석을 효율적으로 작성하기 위한 가이드라인이다.
변경하기 어렵지 않은 스타일을 이용하라.
주석 작성 시간을 줄이기 위하여 의사코드 프로그래밍 프로세스를 사용하라.
주석을 개발 스타일에 포함시켜라.

가장 적당한 주석 수

캐퍼스 존스는 IBM의 연구에서 명령문 10개마다 주석을 하나 작성했을 때 이해도가 가장 높아진다는 사실을 발견했다.
각 주석이 효율적인지 초점을 맞추고 불필요한 주석은 없애라.

5. 주석 스타일(다시 봐보기)

주석을 적용하고자 하는 수준인 프로그램, 파일, 메소드, 단락, 개별 줄에 따라 여러 다른 기법들을 활용하여 작성할 수 있다.

개별 줄에 주석 작성

코드의 줄마다 주석을 작성해야하는 경우는 다음과 같다.
해당 줄의 코드가 설명이 필요없을 정도로 복잡하다.
해당 줄에서 오류가 발생한 적이 있어 이를 기록하고 싶다.
다음은 이에 대한 가이드라인이다.
제 멋대로인 주석은 피하라.
한 줄짜리 줄 끝 주석을 피하라.
코드 여러 줄에 대한 줄 끝 주석을 피하라.
하나의 줄 끝 주석을 한 줄 이상의 코드에 적용하고자 하면 주석이 어떤 줄에 해당하는 내용인지 확인할 수 없다.
줄 끝 주석을 사용해야 할 때
데이터 선언에 주석을 작성하기 위해서 줄 끝 주석을 사용할 수 있다.
유지보수 기록을 위해서 줄 끝 주석을 사용하지 말라.
블록의 끝을 표시하기 위해서 줄 끝 주석을 사용하라.
특별한 두 가지 경우를 제외하면 줄 끝 주석은 개념적인 문제를 가지고 있고 코드를 복잡하게 만들기 쉽다. 결론적으로 피하는 것이 상책이다.

단락에 주석 작성

문서화가 잘된 프로그램의 주석 대부분은 한두 문장으로 코드 단락을 설명한다.
다음은 단락을 잘 사용하기 위한 가이드라인이다.
코드의 의도를 나타내기 위한 주석을 작성하라.
주석 다음에 오는 코드 블록의 목적을 설명하라.
문서화에 들일 노력을 코드 작성에 들여라.
단락 주석을 작성할 때 방법보다는 그 이유를 집중적으로 다루어라.
코드를 읽는 개발자에게 다음에 오는 내용을 알려주기 위하여 주석을 작성하라.
주석을 소중하게 여겨라.
일반적이지 않은 내용을 문서화하라.
축약하지 마라.
중심 주석과 부차적인 주석을 구별하라.
프로그래밍 언어나 개발 환경에서의 오류나 문서화되어 있지 않은 기능에 관한 내용을 주석으로 작성하라.

데이터 선언에 주석 작성

수치 데이터의 단위를 주석으로 작성하라.
허용 가능한 값의 범위를 주석으로 작성하라.
변수의 의미를 주석으로 작성하라.
입력 데이터의 한계를 주석으로 작성하라.
변수와 연관된 주석에 변수의 이름을 입력하라.
전역 데이터를 문서화하라.

제어 구조에 주석 작성

제어 구조 앞에 있는 공간이 일반적으로 주석을 입력하기 좋은 위치다.
다음은 이에 대한 몇 가지 가이드라인이다.
ifcase, 반복문, 명령문 블록 앞에 주석을 입력하라.
각 제어 구조의 끝에 주석을 작성하라.

메소드에 주석 작성

다음은 메소드 주석을 위한 몇 가지 가이드라인이다.
설명하는 코드와 가까운 곳에 주석을 작성하라.
메소드의 위에 한두 문장으로 각 메소드를 설명하라.
매개변수를 선언한 곳에서 문서화하라.
Javadoc과 같은 코드 문서화 유틸리티를 활용하라.
입력과 출력 데이터를 구별하라.
인터페이스 가정을 문서화하라.
사용되는 전역 변수를 문서화하라.
메소드의 한계에 대해서 주석을 작성하라.
메소드의 사이드 이펙트를 문서화하라.
사용된 알고리즘의 출처를 작성하라.
프로그램의 위치를 표시하기 위하여 주석을 사용하라.

클래스와 파일, 프로그램에 대한 주석 작성

클래스와 파일, 프로그램은 여러 모듈을 포함하고 있다는 특징이 있다.
이러한 경우의 문서 작업은 파일이나 클래스, 프로그램의 내용에 대해 의미 있고 상위 수준의 관점을 제공해야 한다.
클래스 문서를 작성하기 위한 일반적인 가이드라인
클래스에 대한 설계 접근 방법을 기술하라.
한계와 사용 가정 등을 기술하라.
인터페이스를 기술하라.
파일 문서화를 위한 일반적인 가이드라인
각 파일의 목적과 내용을 설명하라.
버전 관리 태그를 넣어라.
주석 블록에 법적인 사항을 넣어라.
파일 이름은 내용과 관련된 이름으로 지어라.

6. IEEE 표준

소스코드 수준을 벗어난 문서화에 대해서는 IEEE가 훌륭한 정보를 제공한다.
다음은 소프트웨어 프로젝트에 가장 적합한 몇 가지 국내외 표준이다.
최상위 표준은 ISO/IEC 표준 12207, Information Technology. Software Life Cycle Processes다.

요점 정리

주석을 작성할 것이냐는 질문은 합당하다. 주석은 잘못 작성하면 시간 낭비일 뿐만 아니라 때로는 해롭기도 하다.
소스코드는 프로그램에 대해 대부분의 중요한 정보를 포함해야 한다. 프로그램이 실행되는 한 소스코드가 다른 어떤 리소스보다 최신으로 유지될 가능성이 높으므로 중요한 정보를 코드에 담는 것이 유용하다.
좋은 코드는 그 자체로 훌륭한 문서다 코드가 추가적인 주석이 필요할 정도로 나빠지면 우선 추가적인 주석이 필요 없게 코드를 향상시키려고 해야 한다.
주석은 그 자체로는 설명되지 않는 코드에 대한 요약 수준이나 문제 수준에서 다뤄야 한다.
어떤 주석 스타일은 손이 많이 간다. 관리하기 쉬운 스타일을 사용하라.