본문 바로가기
CleanCode

Clean Code 짜기5

by 김대근'IT공부 2019. 10. 24.

-주석  //   /**/

 

복잡하고 주석이 많이 달린 코드보다

표현력이 풍부하고 깔끔하고 주석이 거의 없는 코드가 더 좋다

코드만으로 의도를 표현하기 어려운경우 주석을 달아야 한다.

 

// 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. 
if ((employee.flags & HOURLY_FLAG) &&
    (employee.age >65))

----

if (employee. isEligibleForFullBenefits())

 

위 두 코드를 보면 코드로 의도를 표현하는데 의도가 많은경우

주석으로 달려는 설명을 함수로 만들어 표현한 것이다.

 

 

 

기본적인 정보를 주석으로 제공하면 편리하다

 

// 테스트 증인 Responder 인스턴스를 반한한다.
protected abstract Responder responderInstance();

 

위 코드의 주석은 추상 메서드가 반환할 값을 알려주는 주석이다.

위 코드에서 조금 더 변경하면 함수 이름을 responderBeingTested로 바꾸면 

주석이 필요 없어진다.

 

 

 

의도를 설명하는 주석으로 코드를 이해하게 도와줄수 있다.

public int compareTo(Object o)
 {
   if(o instanceof WikiPagePath)
   {
      WikiPagePath p = (WikiPagePath) o;

      String compressedName = StringUtil.join(names, "");
      String compressedArgumentName = StringUtil.join(p.names, "");
      return compressedName.compareTo(compressedArgumentName) ;

    }
    return 1; // 오른쪽 유형이므로 정렬 순위가 더높다.
 }

결과값 리턴에 깔린 의도까지 주석으로 알려줄수 있다.

 

 

 

 

TODO주석으로 앞으로 할 일을 메모해두면 좋다

 

// TODO-MdH 현재 필요하지 않다.
// 체크아웃 모델을 도입하면 함수가 필요 없다.
protected Versionlnfo makeVersion() throws Exception 
{
    return null;

}

주기적으로 TODO주석을 점검해 필요없는 주석은 없애는게 좋다.

 

 

 

 

아래의 코드는 주석으로 코드를 지저분하게 만든다.

public abstract class ContainerBase 
implements Container, Lifecycle, Pipeline,
MBeanRegistration, Serializable {

/ ** 

* 이 컴포넌트의 프로세서 지연값
*/
protected int backgroundProcessorDelay = -1;

/  ** 
* 이 컴포넌트를 지원하기 위한 생명주기 이벤트
*/
protected LifecycleSupport lifecycle = 
new LifecycleSupport(this);
/ **  
* 이 컴포넌트를위한 컨테이너 이벤트 Listener
*/
protected ArrayList listeners = new ArrayListO
/ ** 
* 컨테이너와 관련된 Loader 구현
*/
protected Loader loader = null;

/ ** 
* 컨테이너와 관련된 Logger 구현
*/
protected Log logger = null;
/  ** 
* 관련된 logger 이름
*/
protected String logName = null;

/ ** 
* 컨테이너와 관련된 Manager 구현
*/
protected Manager manager = null;
/**
* 컨테이너와관련된 Cluster 
*/
protected Cluster cluster = null;

....

이와 같이 중복되고 코드의 기록이라는 목적에는 기여하지 못하는주석을 사용하지 않도록 하자.

 

 

 

있으나 마나 한 주석은 달지 않는게 좋다.

너무 당연한 사실을 언급해서 새로운 정보를 제공하지 못하는 주석은 표기하지 않도록 하자

 

/*

* 기본생성자

*/

protected AnnualDateRule(){

}

 

/** 월 중 일자 */

  private int dayOfMonth;

 

이렇게 코드만으로 확인이 가능한대, 주석으로 중복적인 정보를 제공해주지 않아도 된다.

 

 

 

주석으로 처리한 코드는 팀단위로 작업을 할때 다른 사람이 중요하다고 생각할 수 있어

코드를 지우기 주저하게 된다.

그래서 사실상 쓸모없는 코드인대도 지우지 못하고 남아있는 경우가 있다.

InputStreamResponse response = new InputStreamResponse();
response.setBody(formatter.getResultStream(), formatter.getByteCount());
//InputStream resultsStream = formatter.getResultStream();
//StreamReader reader = new StreamReader(resultsStream);
//response.setContent(reader.read(formatter.getByteCount()));

이렇게 주석처리코드는 꼭필요하다면 주석으로 중요도를 명시해두자.

 

 

 

함수나 변수로 표현이가능하면 주석을 달지말고 코드로 표현을 하도록 하는게 좋다.

 

 

 

 

 

 

참고한 책

클린 코드 (Clean Code)

반응형

'CleanCode' 카테고리의 다른 글

Clean Code 짜기7  (0) 2019.10.25
Clean Code 짜기6  (0) 2019.10.24
Clean Code 짜기4  (0) 2019.10.22
Clean Code 짜기3  (0) 2019.10.21
Clean Code 짜기2  (0) 2019.10.21