18 Jun
2014
Posted in: 코드
By    4 Comments

Allman Style


Allman Style
by 신영진(YoungJin Shin), codewiz at gmail.com, @codemaru, http://www.jiniya.net

codestyle

Allman vs K&R

답없는 종교 전쟁을 또 다시 시작하자는 이야기는 아니구요. 페북에 재미난 그림이 있어서 퍼왔습니다. Allman과 K&R 스타일을 비교한 것 같은데요. 전 개인적으론 Allman 스타일을 선호합니다. 이유는 위키 페이지에 나와 있는 아래 코드와 같은 장점들 때문입니다.

//while (x == y)
{
    something();
    somethingelse();
}

//for (int i=0; i < x; i++)
//while (x == y)
if (x == y)
{
    something();
    somethingelse();
}

    char c;
#ifdef HAS_GETCH
    while ((c = getch()) != EOF)
#else
    while ((c = getchar()) != EOF)
#endif
    {
        do_something(c);
    }

결국 이 이야기 끝에는 블록 단위로 복사, 붙여넣기 편하다는 장점이 위치할 것 같습니다. K&R 스타일을 사용할 경우 블록 단위 복사, 붙여넣기를 하려면 결국 셀 선택을 해야하는 불편함이 있거든요. 물론 이런 이야기를 하면 사이비 프로그래머니까 창조성 없는 복붙 프로그래밍이나 하는것 아니냐는 반론을 감수하긴 해야겠지요. 창조적인 프로그래머 아저씨, 리누스 토발즈옹은 K&R에 대한 신념을 언급한 적이 있었지요.

C 스타일과 관련돼서 항상 튀어나오는 다른 이슈는 괄호를 어디다 위치시키냐 하는 것이다. 인덴트 사이즈와 다르게, 다른 것을 배제하고 한 가지 배치 전략을 선택하는 것은 아주 조금의 기술적인 이유밖에 없다. 그러나 좋아라 하는 방법은 열기 괄호는 라인 끝에 위치시키고, 닫기 괄호는 라인의 처음에 위치시키는 것이다. 이러한 방법은 커닝헌과 리치와 같은 선지자들이 우리에게 보여준 것이기도 하다. 아래와 같이 될 것 이다.

if (x is true) {
    we do y
}

그러나, 거기에는 함수라는 한가지 특별한 경우가 있다. : 그것들은 다음과 같이 열기 괄호를 다음 줄의 시작에 위치시킨다.

int function(int x)
{
    body of function
}

전세계에 분포한 이단자들은 이것은 모순이다... 음 불완전하다...,라는 주장을 펼친다. 그러나 바르게 생각하는 모든 사람은 (a) K&R은 올바르며 (b) K&R도 옳다는 것을 알고 있다. 게다가, 함수는 어쨌든 특별하다 (C에서 함수는 중첩이 불가능하다).

- 리눅스 커널 코딩 스타일, 리누스 토발즈

여러분은 어떤 스타일을 선호하시나요? 특별한 이유가 있으신가요?


  • 트랙백 주소: http://www.jiniya.net/wp/archives/13372/trackback

관련 글

  • reinhard

    토발즈는 신 입니다… 그가 그랬다면 진리라고 믿으면 됩니다…

  • swoosh

    전 allman 스타일을 더 선호 하네요.

  • zoops

    전 allman 스타일에 한표입니다.
    물론 취향 문제라도 생각하기 때문에… 다른 이견도 반대할 생각은 없습니다. ^^

    이유는 복사 붙여넣기 뿐만 아니라…
    블록이 같은 인덴트(컬럼)에 위치해 확실히 보이기 때문에 실수할 여지가 줄어든다고 생각하기 때문입니다.

    K&R 의 방법의 장점은 라인 하나를 줄일수 있다는것인데..
    해상도가 좋아진 지금 환경에선… 그것보다는 위의 이유가 더 좋다고 생각하기 때문이구요.

    다른 장점 있으면 더 알려주세여…

  • DF

    allman 이 더 깔끔하게 보이는 것 같아 allman 스타일을 선호합니다.