개발지식

가독성을 높이는 코딩

우끼우끼몽키 2017. 3. 5. 19:34

1. 이름에 정보 담기

1. 정확히 무엇을 수행하는지를 매우 구체적이고, 풍부한 단어를 사용하여 표현하자.

  • getPage( ) 보단 downloadPage( ), find( ) 보단 search ( ), start( )보단 begin( )

2. tmp나 retval 같은 보편적인 이름은 피하자. ( 굉장히 짧은 시간에 임시적으로만 존재할 때에 한해서 사용하자)

3. 추상적이지 않고 구체적인 이름을 사용하고, 세부정보를 덧붙이자.

  • serialNumber 변수가 Hex 값이라면 serialNumber_hex 가 좋다.
  • delayTime 변수가 초를 표현 한다면 delayTime_secs 가 좋다.
  • size 변수가 cm를 표현 한다면 size_cm 가 좋다.
  • text 변수가 utf8 인코딩 되어있다면 text_utf8 이 좋다.

 

2. 오해하지 않게 이름 짓기

1. 경계를 포함하는 한계값은 Min, Max를 사용하자.

2. 경계를 포함하는 범위에는 First, Last를 사용하자.

3. 경계를 포함하고, 배제하는 범위에는 Begin, End를 사용하자.

4. boolea 변수는 is, has, can, should 단어를 혼합하면 의미가 명확해진다.

 

3. 코드의 미학

1. 코드의 열을 맞추자.

   getPassword("backDoor", "myHome")

   getPassword("room"      , "office"    )

2. 의미있는 순서를 정해서 일관성 있게 사용하자.

  • 가장 중요한 것부터 나열하자.
  • 알파벳 순서대로 나열하자.

3. 코드를 문단으로 쪼개자.

  • 비슷한 성격의 코드를 묶자. 하나의 거대한 덩어리보다는 논리적으로 나눠서 읽는것이 좋다.

 

4. 좋은 주석

1. 함수이름 또는 간단한 로직으로 빠르게 유추 가능한 코드는 주석을 달지 말자.

2. 나쁜 이름에 주석을 달지말고 이름을 바꿔버리자.

3. 생각을 기록하자.

  • 코드를 짜면서 겪었던 생각이나 중요한 통찰을 기록하자. ( // 이 알고리즘만이 가장 빠른속도로 동작한다.)
  • 결함이 있거나, 개선해야 할 코드가 있다면 무조건 기록하자. ( // TODO : 이 코드는 Windows xp 플랫폼에서는 제대로 동작하지 않는다)

 TODO :

아직 하지 않은 일  

 FIXME:

 오동작을 일으킨다고 알려진 코드

 HACK:

 좋지않은 해결책

 XXX:

 위험 !

4. 참조한 문서가 있다면 기록하자. ( //RFC2315 문서 참조)

5. 파일이나 클래스 수준에서 큰 그림을 설명하자.  (// 암호화에 관련된 기능을 초기화하며, 제어하는 handler 클래스)

6. 너무 많은 주석은 오히려 독이 될수도 있다.

 

5. 읽기쉬운 코드

1. 조건문에서 인수의 순서는 왼쪽이 질문을 받는 쪽, 오른쪽이 비교대상이 되는 쪽 ( if ( length <= max_length) )

2. if/else 블록의 순서

  • 부정보다는 긍정을 먼저 사용하자 ( if ( ! hasValue) 보다는 if ( hasValue) 를 선호하자 )
  • 간단한 것을 먼저 처리하자.
  • 비교적 더 중요한 것을 먼저 다루자.

3. 3항 연산자 ? : 는 간단할 떄만 사용하고 가급적 if / else 를 사용하자.

4. if 중첩이나 루프 내부의 중첩을 최소화하자. (continue 나 reurn 활용)

 

6. 큰 덩어리 쪼개기

1. 요약변수를 사용하자 ( if ( id == cert.type.userID) 보단 booal isUser 를 만들고 if ( isUser) 이렇게 표현하는게 더욱 명확하며 가독성이 좋다 )

2. 논리연산자를 과도하게 사용하지 말자. ( (!(key = searchKey(id))) || !key.isvalid) 대신  key = searchKey(id);   if(key != NULL) !key.isValid )

 

'개발지식' 카테고리의 다른 글

POSIX란 무엇인가  (0) 2017.10.19
EOL ( End Of Line )  (0) 2015.09.14
UTC - Time  (0) 2015.09.14
dynamic library / static library  (0) 2015.09.06