본문 바로가기

Programming/프로그래밍 관련

코드 가독성 향상을 위한 팁

반응형

1. 함수화

- 계층적으로 소스 짜기

- 하나의 함수 안에는 하나의 내용만. (함수 내용은 일관성 있게)

- 함수의 모듈화. 다른 프로젝트의 함수를 옮겨와도 사용할 수 있게 전역변수 의존도를 낮추자.


★ 2. 내용이 있어야할 곳에 있는것

실제로 소스를 짜다보면 잘 안지켜지는 것중 하나이다.

 

1) 변수 자체가 있어야 할 곳에 있어야 하는 경우.

loop 변수 초기화는 loop 바로 위에서 해준다. (중요한 것은 loop 와 떨어져있으면 가독성이 떨어진다는 것.)

만약 변수 초기화가 loop 보다 10줄 위에서 실행됐다면 남이 봤을 때 왜 사용된것인지 몰라 당황스러울 수 있다.

 

 

2) 내용 자체가 있어야 할 곳에 있어야 하는 경우.

인턴 일을 하다가 전에 일을 하던 인턴이 짜놓고 간 소스코드를 보고서 이상한 코드가 있었다.

avoidObstacle 이라는 함수의 내용을 보면 else 부분의 내용이 이상하다. 함수의 이름과 안맞는다. 함수안에는 장애물 피하기 관련 부분이 들어가있어야 하기 때문이다. 이 내용은 1번 내용과 일맥상통하다.

 

부가설명을 하자면 joyStickDirection 이라는 변수는 processing(개발 툴)에서 화면에 글씨 써주는 용도로 사용된다.

joyStickDirection == "Center" 일 때 위에 표시한 부분과 같이 UI를 그리게 된다.

 

 

그럼 이제 avoidObstacle() 이라는 함수가 어디에서 사용되는지 살펴보자.

avoidObstacle은 execute 라는 함수에서 사용되는데 그 내용은 다음과 같다. 오히려 else안의 내용은 execute안에 switch 안에 들어갈 수 있게 바꾸거나 execute 안에 들어가는 것이 더 바람직하다는 것을 알 수 있다.

 

3. 주석

1) 주석은 아무리 길어도 욕먹지 않는다. 물론 짧아도 좋다. 간단하고 함축적이어도 좋으니 주석을 달자.

2) 주석 다는 요령 : 내가 1달 후에 이 소스를 봤을 때 주석을 보고 소스내용을 이해할 수 있을 정도로 달아준다고 생각하자.

 

다음 소스코드를 보자. 내용만 보고 다음 내용이 무슨 내용인지 알 수 있는가?

 

그렇다면 다음 소스를 보도록하자. 무슨 내용인지 알 수 있는가?

물론 이 프로젝트에 대해서 모르는 사람이 보기엔 그래도 어려울 수 있으나, 내용마다 주석이 달려있으니 내가 보기에도 편하고 팀원이 보기에도 이해가 쉽다. 주석은 줄마다 달려있어도 좋고, 많으면 많을 수록 좋다.

 

3) 주석 센스

 (1) 조건문 사용시, else 로 끝맺음 &  //None 표시

else 안에 내용이 없다면 else 를 안써도 되지만, if의 내용이 긴 경우 else if 로 끝나는 조건문인지, else 로 끝나는 조건문인지 헷갈릴 수가 있다. 이런 경우를 위해서 else{ /* None */} 으로 표시해 줄 수도 있다.

 

 (2) switch에서의 주석센스

 

많이 사용하는 경우는 아니지만 break 를 안쓰고 넘어가는 경우가 있을 수있다. 이런 경우 break를 빼먹었 다는 걸 한눈에 봐서는 모르는 경우도있고, 설령 봤다고 해도 개발자가 의도한 것인지 실수한 것인지 알기 쉽지않다. 이럴 때를 대비하여 주석으로 // not break 라고 표시만 해줘도 헷갈리지 않다.

 

(3) 길어진 함수나 클래스의 마지막 중괄호에 주석표시로 끝났음을 알리자.

 

 

★ 4. 미리 설계

- 어떻게 코딩을 할지 생각나면 바로 키보드부터 잡으려고 하지 마라. 우선 종이나 혹은 메모장같은곳, 혹은 주석으로 라도 간단하게 설계를 하자. 의사코드(pseudo code)라고도 하는데 형식을 갖출 필요 없이 나만 알아봐도 좋으니 설계를 하길 바란다. 그 이유는 2번을 위해서이다. 소스를 작성하고서 수정하다보면 이렇게 해도 동작하고 저렇게 해도 동작할 수가 있다.

(예시 필요)

이럴 때 그냥 생각나는대로 수정하고 말면 나중에 소스가 한곳에 모여있으면 좋을것이 퍼져있어서 나중에 다시 보거나 남이 봤을 때 가독성이 떨어져서 이해가 힘들수도 있다. 따라서 수정하기에 앞서 전체적인 내용과 흐름을 다시 생각해서 수정, 추가하고자 하는 내용이 어느 부분에 들어가야 가장 적절할지 생각해보는 과정이 필요하다. 노력없이 본인의 소스코드가 가독성 있어질것이라고 바라는건 위험한 생각이다.

 

5. 함수이름, 변수이름 짓기

1) 함수, 변수이름은 한글자로 짓는 사람들도 있는데, 현재 작업중인 프로젝트가 중요하거나 팀원들과 같이하는 협업 프로젝트라면 그러지 않기를 바란다. 만약 x,y,i,j 같은 경우에는 그럴수 있으나, 변수의 이름이 길어진다고 해서 나쁠것은 전혀 없다. 변수의 이름안에는 최대한 많은 정보가 들어가야 한다.

(예시)

 

2) 자료형 명시

int nNum = 10;

double dNum = 10.0; // 틀린 예 : double dNum = 10;

char cMap = '';

char cHomes[]; // 틀린 예 : char cHome[]

 

복수형은 배열같은 객체모음을 나타내는 이름에 사용하자.

부동소수점 변수를 선언할 때는 10이라 쓰지말고 10.0 이라고 쓰는것이 혹시 모를 실수를 예방하기 좋다.

 

3) 파스칼표기법, 카멜표기법

파스칼표기법 예시 : BlackColor

카멜표기법 예시 : blackColor

 

4) boolean 타입 함수 네이밍

일반적으로 bool 타입 함수명 앞에는 is 를 붙임으로써 bool 타입임을 명시한다. 그러나 무조건 is를 붙이려고만 하지 말자.

bool isEmpty()

bool hasLicense()

bool canEvaluate()

bool shouldSort()
bool didJump()

 

5) 열거상수는 공통적 특징을 접두어로 붙인다. (enum 타입)

enum State{

  STATE_READY,

  STATE_START,

  STATE_FINISH,

};

 

변수명은 최대한 다른사람들이 봐도 알아보기 좋게 이름을 짓는것이 좋다.

아래는 변수명을 짓는데 도움을 줄 수 있는 사이트다.

https://www.curioustore.com/#!/

 

Curioustore

변수명 짓기, 컬럼명 짓기, 영어약자, 変数名 つけ方, カラム名建てる, 英語の略語, 命名变量, 命名该列, 英文缩写

www.curioustore.com

 

6. magic number 를 최소화 하자

 

예시1)

 

틀린 예

footAngle < 20 ?? 20이 뭐지..

옳은 예

아 footAngle을 보폭(stride)보다 작으면 시행하는 조건문이구나~

라고 알 수 있다.

 

예시2)

틀린 예

다음을 보면 조건문은 예외처리로 사용되었다. 그런데 여기서 20이 의미하는 바는 무엇일까?

다음 코드를 직접 작성한 사람이라면 단순 임계값이라는 것을 알 수 있겠지만 이 코드를 한 달 후에보거나 다른 사람이 보았을 때 20이 의미하는게 무엇인지 생각하고 고민하게 될 수도 있다.

따라서 magic number를 쓰기보다는 아래와 같이 숫자에 이름을 붙여서 변수로 사용하는것이 좀 더 바람직하다.

옳은 예

7. 팀 프로젝트라면 코드 규칙을 세우는 것도 좋다.

코딩하다보면 if - else if - else 문을 사용하는 경우가 많다.

이 때 경우에 따라서 if만 쓰는경우, if - else 를 쓰는경우, if - else if 만 쓰는경우, if - else if - else 까지 쓰는 경우가 있다. 그러나 소스가 길어지고 else if 를 쓰게되면 else if 가 어디까지 있는지 한 눈에 파악이 힘든 경우가 있다. 그런 경우에 반드시 if - else if 를 쓰면 반드시 else 까지 쓰기로 약속하여 사용할 수도 있다. 조건문의 종료를 확실히 알리기 위함이다. 

 

그러나 else 안에 들어갈 내용이 없다면 어떻게 할까??

다음의 예시를 보자.

 

 

 

else 를 사용하고 내용에 주석으로 //None 으로 내용이 없음을 알릴 수 있다.

 

반응형