깔끔한 코딩

 | C, C++
2009/02/24 23:54

깔끔한 코딩




아으 거의 한달만에 글을 쓰는거 같네요...
2월에는 개인적인 일도 많았고 그밖의 사건사고도 끊이지 않았는지라 ;

오늘은 코딩이라는 주제에 대해 한번 뭔가 써볼까 합니다.
요즘은 그런 생각이 자주 듭니다.
깔끔한 코딩이란 무엇일까 하는...

흔히 이런얘길 하죠...
"내 코드 더러워서 못줘."    <- 자학
"니 코드는 왜이렇게 개같냐..."    <- 비난
"A가 짠거 봤냐? ㅂㅅ같애!"     <- 뒷따마


음~ 사실 깔끔한 코딩과 더러운 코딩이라는 경계선이 존재한다고 분명하게 믿고 있었는데
요즘은 그 라인이 모호해진다는 느낌이랄까
깔끔하다는 얘기가 상대적인 것이지 않은가 하는 생각이 많이 듭니다.

아주 단순한 예를 들어보겠습니다.


<코드 A>


<코드 B>

<코드 A> 스타일을 즐겨 사용하시는 분이 있고, <코드 B> 스타일로 가시는 분들이 있습니다.
누가 더 깔끔하다고 말할 수 있는 것일까요?

하나만 더 들어보겠습니다.


<코드 C>


<코드 D>

중간중간 리턴코드로 걸러주시는 분이 있고, return 모시기 삽입 없이 항상 참인 상태가
지속되도록 코딩을 하시는 분이 계십니다.
<코드 C>와 <코드 D>의 경우 역시 누가 더 깔끔하다고 말할 수 있을까요?

깔끔하다는 의미라는 것이 상대적이라는 냄새가 서서히 납니다.
제 생각이긴 하지만, 보통 개발자들은 결국 자기 눈에 맞지 않으면, 혹은
자기 스타일이 아니면 더러운 코드라고 느끼는 것 같습니다
.

물론 그렇다고 해서 정말 더러운 코드가 없는건 아닙니다.
예를 들어 이런건 누가봐도 정말 더러운 코딩이죠. 무한 if 문입니다.


<코드 E> 끝없는 if 문

머 조건과 필터링이 걷잡을 수 없이 늘어나는 경우가 분명 있긴 하지만 한 조건 안에
10개가 넘는 if 가 들어가면 사실 뚜껑이 열리는 것은 분명합니다 (어시스트 없으면 죽습니다
아 ㅅㅂ 어느게 어느 중괄호야 !!!! 대략 이런 반응....)
하나 더 있습니다.
알 수 없는 변수명이죠.


<코드 F>

for 루프 카운터 변수가 아닌, 일반 변수를 이딴식으로 지어 놓은 것을 보았을 때,
그리고 내가 그 변수명으로 인해 헷갈려서 큰 사고를 칠 뻔했을때, "이 코드의 주인공을
찾으면 반드시 목을 비틀고 만다!"
라는 생각 해보신 분 분명 있을겁니다.

다시 원래의 주제로 돌아와서,
깔끔한 코드의 기준이 상대적이라는 말을 뒷받침해줄 예가 하나 더 있습니다.
사수에게 코드를 인계받았을 때는 물론 이런 얘긴 하지 않지만
보통, 자기랑 실력이 비슷하거나 혹은 더 못한 전임자에게 코드를 인계받았을 때는
소스를 분석하다말고 거의 십중 팔구 이런 소리를 합니다.

"ㅇ ㅏ!!! 것참 더럽게 짜놨네 ㅅㅂ 내가 처음부터 다시 짜고 싶다 !"

그래서 일부의 경우는, 부분부분 리펙토링을 하거나 아니면 정말 자기가 다시 처음부터
코드를 만들기도 합니다. 그러나 시간이 지나고 자기도 유지보수의 압뷁에 시달리다 보면
결국 어느 순간은 "일단 구현하고보자" 의 코드가 여기저기 생겨나게 되고 같은 현상이
되풀이 됩니다. 그리고 그사람이 떠날 때 그 후임자가 코드를 받는다면, 역시 똑같은
소릴 하겠죠 :)

저는 업무 특성상 "실시간 순발력"과 "일단 만드는게 먼저"를 요하는 일만 계속 해왔기 때문에
설계 능력도 떨어지고, 구조적인 감도 하나도 없습니다.
빨리! 빨리! 그저 고속 코딩만을 해왔죠...
뭐 빨리 해야 윗분들이나 고객들이 좋아하고, 저도 그냥 설계다 뭐다 핑계로 질질끄는게 싫어서 ;

그래서 정말 저의 코드는 더럽습니다.
그냥 머 ... 더럽지만 퍼포먼스 테스트만은 잊지 않는 정도의 수준이랄까 ;
주로 남한테 기생하는 기능만 만들었던 지라 ;; 내형적으로는 더럽더라도 외형적으로는 깔끔하게
잘돌아가야 하니까요. lol

어쨌든 그래서 사실 많은 개발자들이 자신의 목숨에 비할만큼 가치를 높게두는 코딩 자존심이나 
방법론 등에 대한 이해도 별로 없고 또 잘 알지도 못합니다.  그래서 코딩이라는 일을 또다른
학문으로 승격시키며 출간되는 수많은 책들... 본것도 없고 잘 모릅니다 ㅎ ; 뭐 근데 그건 저
뿐만이 아니고 라이브 서비스를 주로 하셨던 분들은 대부분 그렇지 않나 싶기도 합니다.

어쨌든 그래서 저는 요즘들어 이런 철칙들이 더욱 중요하다고 느껴집니다.
"남의 코드 씹지 말자."
"내 코드 씹히더라도 개의치 말자."
 

인간들이 꺼려하는 기본 규율에만 어긋나지 않는다면, 코드가 더럽다는 것은 다
상대적인 것이 아닐까. 하는 생각이 많이 듭니다. 어차피 실전에서 변수명을 저따위로 두거나
하나의 함수 길이를 1000줄이 넘도록 작성하거나 하는 일은 많지 않으니까요.

더럽고 깔끔하다는 상대적인 개념만 극복하면, 코딩에 대해 씹힌후 기분 나쁠 일도,
타인을 씹을 일도 없는 게 아닐까 하는게 그냥 요즘 드는 생각입니다.


window31. 2009년 2월.
Posted by window31


트랙백 보낼 주소 : http://window31.com/trackback/242 관련글 쓰기

댓글을 달아주세요

  1. 사당최
    2009/02/25 10:08
    댓글 주소 수정/삭제 댓글
    학창시절 인공지능 오목을 만들면서 함수 하나가 10미터가 넘었던 기억이 (-_-;) 쿨럭
    • 2009/03/04 22:27
      댓글 주소 수정/삭제
      10미터 너무 심한거 아냐 -_-;;
      그나저나 우리 이제 술좀 먹자 ;
  2. 2009/02/25 10:11
    댓글 주소 수정/삭제 댓글
    저도 개발하면서 느끼는게 본인이 보았던 소스가 프로그래밍 될 당시 상황을 잘 알지도 못하고 코드 씹는건 언젠가 본인에게 돌아온다는 것. 그리고 자신이 혼자 볼게 아니라면 변수나 함수명처럼 최소한의 예의는 지켜야 한다는 것이죠.
    연초는 무슨 일 때문인지 매년 정신 없는거 같네요. 올 해도 순식간에 지나갔군요.
    • 2009/03/04 22:28
      댓글 주소 수정/삭제
      그렇죠 ^^; 그런데 당시 상황을 알수가 없다는 것이 문제 ;;
      그런데 국립국어원이라는 사이트를 덕분에 알게 됐네요.
      이 단체는 줄임말로 뭐라고 불러야 할까요.. 국가정보원은
      국정원 이라고 부르는데...그렇다면 여기는 국국원? ;; :p
  3. 2009/02/25 11:25
    댓글 주소 수정/삭제 댓글
    완전 공감되는 글~ -0-b..
    ( 추천같은거 있음.. 바로 눌렀을 듯;; )
    모 모듈 새로 만들때~~
    switch 문 쓰기도 난감한 상황에서..
    서버쪽 모듈이라 예외처리 남발하기 뭣해서..
    if - else 로.. 삽질했던 기억이 나네요~ㅋㅋㅋㅋ
    • 2009/03/04 22:30
      댓글 주소 수정/삭제
      추천버튼을 못찾았으면 밥을 사고
      나도 막상 짤때는 if - else 가 더 편하다-_-
      그런데 나중에 코드 볼땐 "ㅅㅂ switch 를 써야지 if질을 해놨네..." 이렇게 되지 : )
  4. 2009/02/25 18:50
    댓글 주소 수정/삭제 댓글
    8중 for문 썼던 기억이 ㅎㅎ
    • 2009/03/04 22:30
      댓글 주소 수정/삭제
      8중 for ;;; 어떤 알고리즘이시길래 : )
  5. 신고
    2009/02/28 02:23
    댓글 주소 수정/삭제 댓글
    http://websecurity.tistory.com/
    이 블로그좀 가보세요. window31님 블로그 내용 그대로 다 뱃겨놨내요
    저작자 표시도 없구
    • 2009/03/04 22:31
      댓글 주소 수정/삭제
      네. 그렇군요. 음 머 알아서 지우겟죠
  6. 2009/03/02 13:49
    댓글 주소 수정/삭제 댓글
    오늘 처음 여기 방문했는데, 공감가는 글이 있어 댓글 달아봅니다.
    사실 모든 코드는 사람에 따라서 자의적으로 해석되는 경우가 많죠.
    그래도 대다수가 공감한다면 그것이 정답에 가까울 확율이 높다 라고 생각할수 있을것 같습니다.
    위의 문제는 "code craft"라는 책의 6장에서 언급이 되어 있습니다.
    그렇다고 C언어 자체로는 좋은 해결점이 있는건 아니고, 경우에 따라 다른것 같습니다. C++에서는 그나마 해결점을 찾아서 보여주고 있습니다.
    혹시 관심있으시면 찾아보시길 바라오며, 그런데 이 책이 그렇게 좋지는 않네요.^^ 안그러면 추천 날렸을텐데.. 하여튼 모두가 생각하는 그런 문제인듯합니다.
    • 2009/03/04 22:35
      댓글 주소 수정/삭제
      CodeCraft 좀 보다가 제 취향이 아니라서 접었습니다.
      뭐 사실 제가 이 글에 언급한 내용에서 나온 거 중 하나가
      "알고 있지만 고치지 못하는 거" 입니다.

      코드 크래프트나 코드 컴플릿이나 뭐 마찬가지 맥락의 책이라고 생각합니다.

      내용 자체는 좋죠 ^^; 단지 실무에서 그걸 지키기 어려운 상황이
      항상 존재한다는 것
      제 생각에는 대학생이나 개발1년차들이 봐야할 책이라고 생각됩니다.
      뭐 그렇다고 해서 제가 그사람들보다 낫다는 얘긴 절대 아니고요 ;;
      더럽혀진 몸에 보기보다는 대가리가 깨끗할 때 보아라.. 라는 뉘앙스? ㅎㅎ
  7. 2009/03/02 17:35
    댓글 주소 수정/삭제 댓글
    *^^* 좋은 글 잘 읽고 갑니다~~

    더불어 마소 잡지 3월호의 글도 재미있게 읽었어요 ^^

    p.s: 그런데 간혹 이런 것도 논의가 되기도 하더라구요..

    if(a == 0)
    {
    // ...
    }

    if(0 == a)
    {
    // ...
    }

    깔끔한건 둘째치고 생성된 바이너리를 기준으로 볼 때 둘다 똑같은 코드인데 말이죠...
    • 2009/03/03 09:55
      댓글 주소 수정/삭제
      이런건 코딩상의 실수를 줄일때 많이 도움이 된다고 하더군요;;.
      (변수 == 상수) 나.. (상수 == 변수나) 바이너리상..
      차이는 없겠지만..
      코딩할때 '==' 해야될 것을 실수로 '=' 로 하게 된다면;
      (변수 = 상수)는 문법은 맞기땜에 에러가 안뜨지만,
      (상수 = 변수)는 틀린 문법이기에..
      사전에 이런 실수를 방지할 수 있는걸로 말이죠..;ㅋ
    • 2009/03/03 20:17
      댓글 주소 수정/삭제
      *^^* 물론 그렇기 때문에 저렇게 쓰는거겠죠? :p

      그런데 가끔 속도가 더 빠르다고 해서 밑에껄 선호하는 사람이 더러 있어서...;;;
    • 2009/03/04 22:35
      댓글 주소 수정/삭제
      음 두사람의 훌륭한 토론에 제가 낄틈이 없군요 ㅎ
  8. moonistar
    2009/03/02 22:39
    댓글 주소 수정/삭제 댓글
    저도 개발 이제 1년 했는데,,, ㅡ.ㅡ;
    인수인계 받은 코드보고 정말 개떡같다.. 차라리 다 엎고 내가 짜고 싶다..
    라고 입에 달고 달았는데,,,
    뜨끔하네요,,, 다시 생각하게 되네요 ㅋ 내가 짜도 지금 같지 않을지,, ㅎㅎ
    첨으로 글 남기네요,,
    • 2009/03/04 22:37
      댓글 주소 수정/삭제
      뭐 한번이라도 안 그래본 개발자가 어디있겠어요 ㅋㅋㅋ
      전 1년전에 제가 짠걸 보면서도 욕합니다.
      "아 정말 ㅄ같이 짰다. 이당시에 코딩은 발로했나보네"
  9. 2009/12/03 03:24
    댓글 주소 수정/삭제 댓글
    특히나 회사 코드는 좀 나은데, 오픈 소스 코드들은 유명한 프로젝트들도 잘 뜯어 보면 코드가 거의 개판 5분전이 많더라구요. 특히 GNU 어쩌고 하는 코드들이 좀 심하죠(아주 오래 전에 짜여진 소스들이 특히).

    그냥 아무리 개떡같은 코드도 읽고 수정할 수 있는 능력을 배양하는 것이 더 빠른 길이더군요. 복잡한 코드 리팩터링이나 다시 짜다가 알 수 없는 버그로 시간 허비할 수도 있고 말이죠.

    차라리 기존 리거시 코드에 테스트 루틴만 몇개 추가해 놓고 수정 들어 가도 작업이 빨라지더군요. 소스 한줄 고치고 테스트 돌리고 이런식으로 하는 거죠.
  10. Dual
    2010/10/29 16:55
    댓글 주소 수정/삭제 댓글
    특히 FIX ME!!
    HACK!!
    NOT IMPLEMENTED
    같은 코멘트 들이 짜증나요,
    누가 고쳐주길 기대하는거지 ㅠㅠ

BLOG main image
by window31

카테고리

분류 전체보기 (281)
Reverse Engineering (21)
C, C++ (20)
Kernel (8)
Guitar (19)
잡담 (77)
etc (8)
who am i (8)
보안 이야기 (88)
Tools (3)
월간 마이크로소프트웨어/그.. (28)

글 보관함