코딩 스타일만 바꿔도 버그는 금방 잡는다!

안녕하세요 ^^ 두번째 강좌로 다시 찾아뵙는 사베르입니다.

이번 강의는 좀 이론적인 것으로 들어가봅시다.

액션스크립트를 코딩하고 나면 어떤 분들은 버그를 금방 잡는데, 자기는 찾아도 찾아도 보이지 않는 경우가 있지요? 물론 자신의 능력 부족이나 오개념으로 인한 것일 수도 있지만, 코딩 스타일이 나빠서 자신이 쓴 코드를 자신이 읽지 못하게 되는 경우가 있습니다. 저도 프로그래밍을 처음 배울 때 코딩 스타일이 나빠서 이런 일이 많이 있었습니다 🙂

제가 말씀드리고 싶은 몇 가지 코딩 스타일에 대해서 말씀드리도록 하겠습니다.

1. 각종 연산자를 사용할 때

연산자는 정말 안쓰이는 경우가 없지요. 그만큼 스크립트에는 많은 양의 연산자가 들어가기 마련입니다. 그런데 항이 두개가 필요한 이항연산자 같은 경우에는 코딩 시에 약간 주의해 주시는 편이 좋습니다. 예를 들어보겠습니다.

(1) shiftpoint=post_cnt+comment_cnt+event_point;
(2) shiftpoint = post_cnt + comment_cnt + event_point;

위의 (1)과 (2) 중에서 어떤 코드가 더 읽기 쉽습니까? (2)의 경우 연산자 앞뒤가 공백으로 띄어쓰기 되어 있어서 어떤 것이 연산자고 피연산자인지 알아채기가 쉽습니다. (1)과 (2)는 짧은 코드이기에 차이가 별로 느껴지지 않지만, 많은 코드 및 긴 코드를 작성하게 되는 경우 (2)의 경우가 읽기 편하다는 것을 뼈저리게 느끼실 겁니다.

2. 변수 및 함수명 등을 지을 때

연산자와 마찬가지로 변수와 함수도 항상 쓰입니다. 그런데 이름을 막 지어서 나중에 자신도 알아보지 못할 정도가 되면 안되겠지요? 변수 이름을 지을 땐 다음과 같이 하면 읽기도 좋고 남이 보기에도 깔끔해서 좋습니다.

  • 변수 및 함수명에는 이 변수가 어떤 값을 담고 있는지, 또는 이 함수가 어떤 일을 하는지 대략적으로 알 수 있도록 지어줍니다.
    • ex) 합을 저장하는 변수: sum, 게임에서 점수를 저장하는 변수: gameScore
    • ex2) 초기화 함수: Initialize, 특정 문자열을 찾는 함수: findString
  • 이름을 낙타식(각 단어의 맨 앞을 대문자로) 또는 언더바(_)를 사용하여 만듭니다.
    • ex) 게임에서 점수를 저장하는 변수: gamescore (x) -> gameScore 또는 game_score
    • ex2) 특정 문자열을 찾는 함수: findstring(x) -> findString 또는 find_string
  • 이름은 영어로 작성합니다. 한글로 작성할 경우 한국 사람이 보기에는 좋지만 외국에서는 볼 수 없으며 한글 변수의 경우 아주 가끔 버그를 발생시키는 경우도 있습니다. 되도록이면 영어로 작성합시다. (특히 특수문자는 쓰지 맙시다!)
  • (선택사항) 변수 맨 앞에 이 변수가 어떤 형식인지 알려줍시다.
    • ex) 숫자 값인 게임 점수를 담는 변수: nGameScore (n은 Number의 맨 앞글자입니다)
    • ex2) 사용자의 유저네임을 담는 변수: sUsername (s는 String의 맨 앞글자입니다)

이 외에도 많은 방법들이 있는데, 제보해주시면 감사하겠습니다. 저는 이 정도면 충분하다고 생각합니다.

3. ,(콤마)를 쓸 때

콤마는 주로 함수에 매개 변수를 쓸 때 많이 사용합니다. 아래 예를 봅시다.

(1) var cmi:ContextMenuItem = new ContextMenuItem("Shift",true,true,true);
(2) var cmi:ContextMenuItem = new ContextMenuItem("Shift", true, true, true);

(2)의 경우 각각의 매개 변수 구분이 잘 됩니다. 콤마의 경우 위의 예처럼 띄어써도 별로 차이가 느껴지지 않는 부분입니다만 익숙해지면 코드의 가독성을 높이는 좋은 방법입니다.

4. 중괄호를 쓸 때

함수 뿐만 아니라 if, for, while 같은 조건문을 쓸 때에 필요한 중괄호. 가끔씩 생략을 해도 되는 경우가 있는데 생략을 해주지 않는 편이 좋습니다. 아래를 보시죠

예 (1)
for(i=0;i<10;i++)
    for(j=0;j<10;j++)
        if(a[i] == a[j])
            trace("same");

예 (2)
for(i=0;i<10;i++) {
    for(j=0;j<10;j++) {
        if(a[i] == a[j]) {
            trace("same");
        }
    }
}

사실 (1)처럼 어떤 조건문 및 반복문 등에서 괄호를 쓰지 않아도 바로 아래에 있는 한 줄을 무조건 실행하게 됩니다. 하지만 (1)처럼 여러 개를 쓰게 되는 경우 보기 힘들어지는 경우가 생기며 프로그래머가 소스를 수정하다가 괄호를 추가하지 않는 실수를 하여 프로그램이 오작동(컴파일 오류 등이 아닌 프로그래머에 의한 원치 않는 결과 발생)이 발생하게 됩니다. 한 줄을 실행하더라도 (2)처럼 항상 괄호를 사용합시다.

괄호 스타일에는 대중적인 스타일이 두 가지가 있습니다.

방법 (1)
for(i=0;i<10;i++) {
}

방법 (2)
for(i=0;i<10;i++)
{
}

저는 (1)을 사용하는 데, Microsoft Visual Studio (마이크로소프트의 IDE) 에서는 자동으로 (2)로 바꿔버리더라구요. 여러분의 취향에 맞게 사용하시면 될 것 같습니다. (개인적으로 (2)가 더 좋다고 생각하지만, 이미 (1)이 손에 익어버렸습니다 ^^;; )

5. 복잡한 수식을 사용할 때

가끔식 물리 관련 수식을 사용한다던가 할 때에는 수식이 복잡해질 때가 있습니다. 아래 예를 봅시다.

(1) nHeight = initSpeed * nTime + fGravity * Math.pow(nTime, 2) / 2;
(2) nHeight = (initSpeed * nTime) + (fGravity * Math.pow(nTime, 2) / 2);

(2)가 더 보기 쉽죠? 사칙연산 순서를 모르는 사람은 거의 없을 겁니다. 플래시도 수식을 계산할 때 연산자 순서를 지킵니다. 하지만 코드의 가독성을 높이기 위해서 자동으로 먼저 계산되는 수식이라도 꼭 괄호를 사용해서 묶어주면 사람이 보기에 어떤 순서로 계산되는지 쉽게 알 수 있습니다. (참고로 위의 예는 역학 관련 식입니다. 중력에서 시간에 따른 높이를 나타내는 식이지요 🙂 )

부족한 지식이지만 도움이 되었으면 싶어서 이렇게 강좌를 작성했습니다. 위의 내용이 절대로 코딩 스타일의 전부는 아닙니다. 코딩 스타일은 개인의 개성이 담긴 것으로써 저는 모든 사람들이 아주 조금의 차이도 없이 같은 코딩 스타일을 갖는 것은 원치 않습니다. 단지 코드의 가독성을 높이기 위한 노력의 일환으로 위의 내용을 실천해보자는 것입니다. 위의 내용 말고도 더 좋은 방법이 있을 수 있습니다.

제가 빼먹었다고 생각하시는 내용이나 더 좋은 방법이 있으면 꼭 댓글 달아주시기 바랍니다.

다음에 더 좋은 강좌로 찾아뵙겠습니다.

Join the Conversation

4 Comments

Leave a comment

Leave a Reply