코딩 스타일

프로그래밍 2007. 10. 22. 22:27 |
1. 중괄호 쓰기

중괄호 쓰기는 가장 많이 쓰는 3가지가 있는데,
GNU 스타일은 중괄호가 시작할 때부터 들여쓰기가 시작되는 꼴인데
여태껏 이런 식으로 코딩하는 사람은 한 명도 못 봤다.

가장 흔하게 사용되는 것이 K&R, BSD 스타일이다.
보통 교과서에서는 BSD 스타일을 더 많이 쓰는 것 같다.
반면, 프로페셔널 나라에서는 K&R 스타일을 더 많이 보았다.
아무튼 대세는 K&R과 BSD 스타일이 아닌가 생각되므로, 여기서도 이 두 가지만 얘기 한다.

// BSD Style
for(int i = 0; i < SOME_VALUE; i++)
{
    if(SOME_CONDITION)
    {    
         SOME_STATMENT;
    }
    else
    {    
         SOME_STATMENT;
    }
}

// K&R Style
for(int i = 0; i < SOME_VALUE; i++){
    if(SOME_CONDITION){    
         SOME_STATMENT;
    }
    else{    
        SOME_STATMENT;
    }
}

두 스타일의 결정적 차이는 for 나 if 등에서 왼쪽 중괄호('{')가 다음줄에서 시작되는 지 여부이다.
일반적으로는 별 차이가 안 나는 것 같지만, 위와 같이 한 줄 짜리 코드가 들어가면
그 차이가 좀 더 확연해 진다.
K&R 스타일을 옹호하는 쪽은 이런 경우 코드가 깔끔해 지고 쓸데 없이
코드가 많은 공간을 차지하지 않게 되므로 모양새가 좋아지는 점을 강조한다.
하지만 네임 스페이스. 클래스, 구조체, for, if 등 대부분의 경우 이런 스타일을 쓰지만
유독 예외적으로 함수에 대해서는 시작 중괄호를 다음 줄에 쓴다.
이런 면에서는 일관성이 없다고도 할 수 있다.
또한 if 문에서 조건이 길어져 2줄 이상이 되는 경우 모양이 별로 안 예뻐지는 단점도 있다.
// K&R - if 문에서 긴 조건들 ...
if ( THE_FIRST_CONDITION && NEXT_CONDITION &&
     ANOTHER_CONDITION && THE_LAST_CONDITION ) {
     SOME_STATMENT;
}
위와 같이 나열된 조건문들과 중괄호 속의 문장들 사이의 구분이 한 눈에 안 들어오는 경우가 생긴다.
BSD 스타일과 같이 중괄호가 다음 줄에 온다면 K&R 스타일보다는 가독성이 증가할 것이다.

// BSD - if 문에서 긴 조건들 ...
if ( THE_FIRST_CONDITION && NEXT_CONDITION &&
     ANOTHER_CONDITION && THE_LAST_CONDITION )
{
     SOME_STATMENT;
}

어차피 이런 것들은 개인적인 기호와 관련될 가능성이 높으므로 뭐가 딱히 좋다고 할 수는 없다.
하지만 한 조직 내에서는 일관성있게 규칙대로 사용해야 한다.
학교 다닐 때, 컴파일 오류가 나거나 잘 안 풀리는 문제를 물어 보려고 친구를 부르면
항상 그 친구는 제일 먼저 하는 일이 문제를 가르쳐 주는 것이 아니라
자기가 보기 편한 코딩 스타일로 괄호나 들여쓰기를 일일이 수정하는 것이었다는 ...
어찌보면 웃기고도 슬픈 이야기도 있으니 ...


2. 탭과 공백

이런 것 외에도 탭을 스페이스로 대체하는 것이 좋은가 ... 라는 서로 다른 취향도 있다.
학생 때는 당연히 탭을 썼는데,
스페이스로 쓰면 좋은 것이 웹에서도 코드를 잘 볼 수 있기 때문이란다.
(더 많은 장점이 있는 지 모르겠다.)
하지만 여러 사람이 함께 공동 작업을 하고 있음에도 불구하고 cvs 나 svn 등에
'탭 대신 스페이스'라는 코딩 규칙이 있음에도 여전히 탭을 사용한 후 커밋 하는 경우가 많아서
merge 프로그램을 사용할 때 눈에 거슬리는 경우가 상당히 많다.

결론은 ... 한 번 정한 규칙은 반드시 지키자 .
일관성 있는 코딩 스타일이 제일 좋은 것이다


vim 에디트에서 탭을 입력하면 공백으로 처리해 주도록 하려면,
.vimrc 파일에 다음과 같이 설정하면 된다.
set tabstop=4
set expandtab

현재 편집 중인 파일에서 탭을 공백으로 변경하려면 다음과 같이 문자 치환한다.
:%s/\t/    /g
: