콘텐츠로 건너뛰기

보고 싶은 코드, 보기 싫은 코드. 코드 컨벤션

사람들마다 성격이 다르고 생각이 다르고 개성이 다르다. 그렇지만 내가 지금까지 수없이 만나왔던 ‘보기 싫은 코드’는 내가 장담하건대 사람의 스타일이 달라서가 아니었다.

한때 KLDP에서 썬의 코딩 스타일과 GNU의 코딩 스타일에 관련된 게시물을 하나 읽게 되었고 코딩 스타일에 대해서 잠깐이나마 고민해 본 적이 있었다. 썬의 코딩 스타일, GNU의 코딩 스타일의 차이 중 중괄호의 표기 방법에 대한 것이었는데 두 스타일의 차이는 이렇다.

// GNU의 스타일
while (var)
{
    if (0 < a)
    {
        continue;
    }
    else
    {
        break;
    }
}
// 썬의 스타일
while (var) {
    if (0 < a) {
        continue;
    } else {
        break;
    }
}

위의 두 코드는 내용이 없는 임의로 작성한 코드이니 코드의 내용보다 중괄호의 형태를 살펴보자.

나는 처음 배울 때부터 썬의 스타일로 배웠고 썬의 스타일로 표기된 책밖엔 보질 못했었다. 그랬기에 GNU의 스타일을 처음 봤을 때 무척이나 신선했다. 썬의 스타일과는 다르게 GNU 스타일은 괄호의 범위나 반대쪽 짝을 알아보기가 훨씬 수월하다.

중괄호가 여러 개 중첩된 코드를 작성하게 될 때마다 중괄호의 범위를 혼동해서 실수할 때가 많았기 때문에 들여쓰기는 그 무엇보다 우선해서 철저하게 하는 편이었다. 코드의 가독성을 높이고 실수를 줄이기 위한 내 나름의 자구책은 철저한 들여쓰기였는데 다른 방법으로 중괄호를 표기하는 방법이 있었다는 것은 미처 생각지 못했었다.

그래서 GNU 스타일이라는 것을 보게 된 이후에 한동한 GNU 스타일로 중괄호를 표기하는 코딩을 한 적도 있었다. 그러나 눈에 익은 게 더 편한 법이라 얼마 지나지 않아 다시 원래의 스타일을 사용했고 들여쓰기를 철저하게 지키려 노력하고 있다.

지켜지는 코드 컨벤션
지켜지는 코드 컨벤션

코드의 가독성을 고민해 보지 않은 사람이라면 절대 저 중괄호의 의미를 모를 것이다. 들여쓰기가 왜 필요한지도 모를 것이다. 이건 정말 간단하면서도 중요한 문제인데도 말이다.

내가 지금까지 접했던 ‘보고 싶은 코드’와 ‘보기 싫은 코드’에는 코딩 스타일(위에 적은 스타일속성과는 전혀 다른)이 크게 작용한 편이다. 들여쓰기가 잘 되어있고 중괄호의 범위를 잘 알 수 있게 만들어두고 연관성 있는 이름으로 변수명, 메소드 명, 클래스 명을 표기해 놓은 코드는 그 코드가 무슨 내용을 담고 있든 간에 한 번쯤 보고 싶게 만드는 코드들이었다. 반면에 들여쓰기가 엉망이고 제멋대로의 변수명에 루프나 메소드의 범위조차 알아보기 힘들게 중괄호를 던져놓은(내팽개쳐 놓은) 코드들은 그 코드가 아무리 위대한(?) 내용을 담고 있어도 나에겐 그저 ‘보기 싫은 코드’ 중의 하나일 뿐이다.

젠장, 아무리 대단한 내용물이 있어도 알아먹을 수 있어야 쳐다보지… 코드를 읽느라고 스트레스받아가며 끙끙대며 시간을 투자할 바에는 대단한 내용물을 포기해 버리는 게 낫다. 사실 들여쓰기 엉망에 변수명 엉망인 코드들은 대단한 내용을 갖고 있을 확률은 희박하다^^ㅋ

코딩 스타일에 대해서는 블로그를 통해서 몇 번인가 썼던 적이 있다. 내가 적었던 글 중에 이런 내용도 있었다.


가끔 생각하는 것인데, 정말 누군가를 저주해서 제거해 버리고 싶을 때 이런 방법이 있을 수 있다. 주석하나 없고 이해하기 힘든 변수명이 나열되어있는 긴 소스코드에 추가적으로 어떠한 기능을 더 넣고싶다라는 요구사항과 함께 제거해버리고 싶은 사람에게 넘겨준다. 물론 소스에 대한 어떠한 설명을 해 주어서도 안되며 기왕이면 들여쓰기를 엉망으로 해서 만들어 준다면 효과는 배 이상이 된다. 중간중간 철자가 틀리거나 세미콜론(;)을 빼 두어서 에러를 유발해도 좋다.

class aA{
  int bb;
flat AA
for(S = DD; S > bb; S++){   ...
  ...
         }
     tackle(h);}

대략 이런 형태이면 매우 만족!! 얼마 지나지 않아 좋은 소식이 올 것이다. 그는 이미 머리가 터져서 피를 쏟으며 쓰러져 있을 것이다.

초급개발자가 본 어의없는 프로젝트 진행 – 싸인펜


당시에 위의 내용을 쓰면서 농담처럼 다른 사람을 제거하는 방법이라 적었었는데, 실제로 제거될 수 있다는 사실을 꼭 명심하자. 제거되지 않았더라도 상대방은 엉망의 코드를 보면서 몇 번이고 자살 충동을 느꼈으리라는 것만은 알자.

당신이 들여쓰기, 변수명, 기타 등등 모두가 엉망인 코드를 인수·인계받아서 그 코드를 관리하고 유지보수하는 업무를 맡게 되었다고 생각해보라. 당장이라도 회사를 때려치우고 싶은 심정일 거다. 이해를 최대한 쉽게 만들어 놓은 코드도 이해하려면 어려운 법인데, 엉망인 코드를 건네주는 것은 그냥 그것을 보지 말라는 소리다. 알아보기 힘들게 만들어진 코드들 에러 잡아내고 내용 이해하고 하시는 분들은 정말 존경한다.

나 자신도 초보자이면서 이런 소리 함부로 하면 건방지게 들릴지는 몰라도 들여쓰기 안되어있고 변수명 내키는 대로 쓴 코드를 작성하는 사람은 ‘정말 완전 초보자’이다. 한글로 따지면 띄어쓰기 안 하고 딱딱 붙여서 장문을 쓴다는 소린데 한글을 제대로 배운 사람이라면 그렇게 할까. 정말 ‘정말 완전 한글의 초보자’인 한글을 배우는 외국인들이나 할 수 있는 일이다. 프로그래밍 언어도 똑같다. 언어 제대로 배운 사람이 들여쓰기 안 할까. 들여쓰기 변수명 제대로 안 하는 사람은 정말 초보자다. 코드만 딱 보면 그냥 안다.

코드를 작성할 때 본인을 위해서 작성하지 말고, 다른 사람에게 보여주는 코드라 생각하고 작성하자. 나 편한 대로 하지 말고 다른 사람을 위해서 작성하자. 결국 다른 사람과 동시에 본인을 위한 길이기도 하다. 코드 엉망으로 작성해놓고 에러 안 잡힌다고 울고불고해 봤자 도와줄 수 있는 사람 아무도 없다. 다른 사람이 그 코드를 봤을 때 알아먹을 수 있어야 도움을 주지…

다른 사람에게 코드를 보여줄 때 초보티 내고 싶지 않고 ‘코드 잘 짰다’, ‘가독성이 좋다.’, ‘코드가 눈에 편한데?’ 정도의 평가를 듣고 싶다면 예전에 내가 썼던 ‘코딩 스타일‘ 이라는 글을 참고하길 바란다. 딱 요 정도만 지켜줘도 코드갖고 욕먹는 일은 없을 것이다.

내가 접한 ‘보기 싫은 코드’는 사람의 스타일처럼 사람마다의 개성 때문에 절대 아니었다. 개성을 떠나서 기본적으로 지켜줘야 할 것들을 지켜주지 않았던 코드들이 내가 겪었던 ‘보기 싫은 코드’의 전형적인 모습들이었으니까. 혼자서 작성하는 코드이기에 코딩컨벤션 같은 게 없더라도 그것과의 별개인 기본을 말하는 겁니다.


UPDATE 2008.1.20

제가 잘못 알고 있었던 코딩 스타일에 대한 내용이 자세하게 정리된 링크를 추가합니다. GNU 스타일로 알고 있었던 코딩 스타일은 Allman 방식이었고 썬 스타일의 정확한 명칭은 K&R 방식이었군요.

Allman 식 이클립스 Java 코딩 스타일 프로파일


11 개의 댓글

  1. 장단이 있는 것 같습니다. 짧은 코드 일때는 GUN방식이 가독성이 좋아보이지만 코드가 약간만 길어지면 라인수가 늘어나서 한화면에 다 볼 수 없게 되서 후자가 더 보기 좋아지는 것 같더라구요. 요즘은 그냥 후자만 쓰고 있습니다. 일단 길게 작성하다가 나중에 리펙토링할때 중복코드나 기능별로 메소드로 추출해서 메소드 이름 잘지어서 이해하기 쉽고 가독성 높은 코드로 만들면서 작업하는거져 뭐 ^^;

    1. 맞는 말씀입니다^^ㅋ 장단점이 있음에도 저는 눈에 너무 익어버린 썬의 스타일이…ㅎㅎ

      익숙한 것 만큼 편한것이 없더라구요.

  2. 저는 GNU스타일을 쓰고 있는거였군요…
    음음, 저도 SUN스타일을 사용을 하다가 GNU스타일로 전환했는데
    그 이유는 더 보기 좋은지라 -_-;;
    하지만 웹 프로그래밍에는(스크립트 언어일시) 절대적으로 SUN스타일로 표기를 합니다. 이유는 간단히 이야기해 최대한 바이트수를 줄여서 트래픽을 줄이고 속도를 높여보겠다는 생각이라 ㅎㅎ

    1. GNU스타일로 전환하셨군요!!
      확실히 보기엔 좋은데 막상 작성하려면 손에 익질 않아서 마구 뒤섞여버리네요^^ㅋ

    2. 싸인펜 //
      이클립스를 사용하신다면 뒤섞여도 문제 없습니다. ctrl+shift+f 단축키 한방이면 코딩 스타일을 한가지로 통일 시켜줍니다. 여럿이서 한파일을 동시에 작업할 때 코딩 스타일으르 맞추기 위해서 종종 사용하기도 하죠. ^^;

  3. 남이 보기 편한 코딩이라고 하니 일화가 하나 생각나네요.

    2004년에 모 동영상 싸이트에서 동영상을 퍼오려고 소스보기를 했는데 동영상 태그를 둘러싸고 있는 table 바로 아래에 이런 주석이 있었습니다.

    그거 보면서 든 생각, “아 참 이 싸이트 발로 만드셨구나….”

    1. ㅎㅎㅎ 저런 주석은 이용자에게까지 보여 줄 필요는 없는건데.. 사이트 만드신분이 너무 친절(?)하셨네요^^ㅋ

  4. 핑백: 최익필의 이름없는 블로그

  5. 저는 웹프로그래밍을 했던 터러 SUN 스타일이 익숙해졌었는데, C++ 코딩하게 되니까 GNU 스타일이 더 보기 깔끔해서 GNU 스타일을 사용합니다.

    1. 저는 아직까지도 SUN스타일을 고집하고 있습니다^^ 눈에 익다보니까 코드가 훨씬 정리가 잘 되어있다는 느낌이 들어서요.

      최익필님이 GNU스타일을 깔끔하게 느끼시는것 처럼 그런것 같습니다^^

      대체적으로 SUN스타일, GNU스타일 외에 약간 볕내적인(?)다른 특이한 스타일로 코딩하시는 분들을 아직 본적이 없네요;;

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다