프로그래밍 칠거지악

  1. go to
    • 아직도 살아 있었냐?  멸종 된 이후 화석만이 가끔 발견된다고 하더니!
  2. 전역 변수
    • 전역 변수는 여러 객체(요소)들을 하나로 연결하여 "스파게티 코드"를 유도하게 함
    • 어쩔 수 없는 경우가 아니라면 무조건 피해야 함
  3. 중복 코드
    • 완전히 같은 코드의 반복
    • 유사한 코드의 반복
  4. 쁜 이름
    • 이름 만으로 무엇을 하는 지 짐작할 수 없는 함수
    • 어디서 소스를 복사 해 왔는 지, 하는 일과 전혀 다른 이름을 가진 변수, 함수, 객체 참조 변수 등..
  5. 너무 깊은 블럭
    • 3중, 4중 반복(루프)?  오노!!  (3차원 그래프 문제 등이 아닌 이상 3중 반복문부터는 고민을 해야 합니다)
    • 조건문의 반복도 문제
  6. 너무 긴 블럭
    • if () { 이 시작 한 뒤 한 참을 스크롤해도 나타나지 않는 }
    • 함수 하나가 A4 용지를 넘어가는 장편 소설!
  7. 매직 넘버
    • 의미를 가진 숫자는 상수로 처리해서 상수 이름만 보고도 의미를 파악 할 수 있도록


사족

여기서 하나만 덧붙이자면, 외형적으로 이쁜 코드를 만들려고 노력해야 합니다.  줄 맞춰 쓰기 단락 구성 등 일관성 있는 코드 형식이면 좋겠습니다.  보편적인 코딩 규칙을 따른다면 더할 나위 없고요.


C 언어 등에서의 goto

글을 쓸 때 설명 할 것인가 고민을 하다가 큰 상관없다고 생각하여 말았는데, 결국 언급 된 사례가 있어 해명을 합니다.  저도 C 언어를 사용 할 때에는 함수 탈출 전 뒤처리가 필요 할 때 goto를 사용합니다.  이런 경우에도 return 전에 뒤처리 코드를 적을 수도 있겠지만, return 이 발생하는 곳이 여러 곳인 경우에는 goto 를 사용하기 도 합니다.  사실 화석보다 찾아보기 힘듭니다 ㅡ.ㅡ;




중첩 된 반복 문을 빠져나갈 때의 goto


"중첩 된 반복문을 빠져 나갈 때의 goto 문은 괜찮지 않겠냐?"는 의견을 받았습니다.  


듣고보니 당연히 goto 가 편할 것으로 보입니다.  그런데, "왜 그런 코딩을 한 기억이 없는 가?" 라는 생각이 들어서 제 경험을 되돌아 봤습니다.  제 방식이 무조건 옳다는 것은 아니지만, 저의 경우에는 중첩 된 반복문의 탈출은 return을 사용하고 있었습니다.  


중첩 된 반복문은 함수로 따로 빼서 사용하는 습관이 있다는 것을 저도 이번에 깨달았습니다.  


중첩문을 빠져나오고 반복문의 처리 된 내용을 마무리 처리를 거쳐야 하는 경우라면, 단순히 return 으로 끝낼 수가 없으니, 따로 함수로 빼고 return 값을 이용해서 마무리 처리를 진행하는 형식입니다.  


중첩 된 반복문은 단순 반복문에 비해서 특정한 의미를 가지는 경우가 대부분이었기 때문에 함수로 빼내서 사용하는 것이 훨씬 자연스럽게 느껴졌었던 것 같습니다.  


"try finally"를 사용 할 수 있는 경우라면 리턴 값을 받아서 처리하지 않고, 하나의 함수 내에서 마무리를 함께 처리 할 수도 있습니다.




기타


다른 의견이 있는 분들도 알려주시면 감사하겠습니다.







Posted by 류종택


티스토리 툴바