E D R , A S I H C RSS

가독성

간단하게 C언어에 대한 문제와 답을 올리는 페이지에서 다음과 같은 내용이 있었다.

~cpp 
※ 다음이 옳은지 옳지 않은지 평가하고 옳다면 옳다고 적고, 옳지 않으면 옳지 않다고 적고 왜 그런지 이유를 적으시오.

1.

#include <stdio.h> 
 
main(){ 
int i; 
 
        for(i=0; i<10; i++){    // 딴지 : {는 for문 뒤에 쓰는 것이 좋다. -_-. 내리는 것은 정말 좋지 않은 스타일이다.(가독성을 해친다.) 
                printf("%d", i); 
        } 
} 

brace를 같은 줄에 쓰는 것이 과연 가독성을 해치는가?

가독성은 개인취향이라고 생각합니다. 제 경우는 C, C++에서 { 를 내리지 않는 경우보단 내리는 경우가 더 보기 편하고, JavaLanguage 에서는 내리지 않는게 더 편하답니다. 애초에 CodingConventions 이라는 것이 존재하는 것도 통일된 코딩규칙을 따르지 않고 개인취향의 코드를 만들어내다 보면 전체적으로 코드의 융통성이 결여되고 가독성또한 전체적으로 떨어지는 문제를 미연에 방지하기 위함이라고 생각합니다. 특히나 ExtremeProgramming 의 경우처럼 CollectiveOwnership 을 중요한 프랙티스 중의 하나로 규정한 방법론에서는 CodingConventions 과 같은 공동소유의 산출물에 대한 규칙이 더윽 중요하다고 생각됩니다. 요는, { 를 내리느냐 내리지 않느냐가 가독성이 높냐 낮냐를 결정짓는 것이 아니고 가독성이라는 하나의 평가요소의 가치는 개인에 따라 달라질 수 있다는 것입니다. - 임인택

이 글을 쓰고 저 문제에 대한 이의 제기가 들어올줄 예상은 하고 있었습니다. 그에 따른 제 변명은 이렇습니다. 여러 언어의 특성상 언어마다의 코딩 스타일은 엄연히 존재합니다. C언어의 특성에 따라 하나의 함수는 한 화면에 모두 출력되게 하는 것이 중요합니다. (물론 요즘과 같은 큰 터미널에서는 문제가 되지 않겠습니다만,..) 때문에 코드의 가독성을 높히며 많은 코드들을 짜는 것은 불가분의 관계라고도 할 수 있겠죠.(함수를 붙여쓰면 코드들은 많이 들어가나 가독성이 매우 떨어지죠.) 하지만 C언어에서 저것과 같은 방식의 코드는 코드의 라인만 늘리는 결과를 초래하게 됩니다. 예를 들어 24라인만 쓸 수 있는데 for문과 while문의 갯수가 4개라고 하면 4줄을 낭비하는 꼴이 됩니다. 즉, for문과 while문의 가독성을 위해 전체적인 함수 가독성을 떨어뜨리게 되는 것이죠. (또한 for문과 while문의 {를 아래로 내리는 것과 위로 올리는 것의 차이점은 얼마되지 않습니다.) 제가 강조한 것은 이 전체적인 모듈의 가독성을 뜻한 것입니다. (딴지를 걸자면 80x24 화면에 저러한 코딩 방식을 사용하는 것은 죽음을 자초하는 길일것입니다. 토발즈 또한 강조한 것이기도 하구요. :) ) - 이영호
저도 중괄호({,brace)를 한줄에 쓰는 스타일을 선호합니다. 하지만 그것은 어디까지나 취향의 문제라고 생각합니다. 취향이 약간 다를 뿐이지 (과장된 표현이었겠지만) 죽음을 자초할 정도로 틀린일은 아니라고 생각합니다. 원만한 CollectiveOwnership 을 위해서는 다른것을 틀리다고 말하면 안될것 같습니다. --이덕준

Python 과 같은 언어의 경우 {} 자체를 쓰지 않고 아에 들여쓰기로 블록를 표현합니다. 우리가 코드를 볼때 해당 블록 범위를 읽을때에는 { } 의 위치보다는 들여쓰기로 블록 범위를 파악하는 일이 더 많다는 점에 대해서도 생각해 볼 필요가 있을 것 같습니다. --1002


글을 작성하신 분과 제가 생각하는 '가독성'에 대한 정의가 다른게 아닌가 합니다. 코드를 글로 비유해 보자면(저는 비유나 은유를 좋아한답니다) 이영호님께서는 눈에 거슬리지 않게 전체적인 문장이 한눈에 들어오는가를 중요하게 생각하시는 것 같습니다. 저는 가독성이라는 개념을 문장들이 얼마나 매끄럽고 문단과 문단의 연결에 부적절함이 없는가에 초점을 맞추고 있습니다. 문단의 첫 글자를 들여쓰기를 하느냐 마느냐가 중요한 것이 아니고 그 문단이 주제를 얼마나 명확하고 깔끔하게 전달해 주느냐가 중요하다는 것이죠. CollectiveOwnership 을 위한 CodingConventions와 글쓰기를 연계시켜 생각해 보자면 하오체를 쓸것인가 해요체를 쓸것인가 정해두자 정도가 될까요? 제가 생각하는 가독성의 정의에서 brace의 위치는 지엽적인 문제입니다. SeeAlso Seminar:국어실력과프로그래밍
저도 딴지를 약간 걸어보자면 토발즈가 작성한 Linux Kernel Coding Style 이라는 문서를 보니 첫 부분에 다음과 같은 부분이 있네요.
{{|
This is a short document describing the preferred coding style for the linux kernel. Coding style is very personal, and I won't force my views on anybody, but this is what goes for anything that I have to be able to maintain, and I'd prefer it for most other things too. Please at least consider the points made here.
|}}
위의 서문(?)과 brace에 대한 부분을 봐도 토발즈가 코딩 스타일에 대한 자신의 생각을 독자들에게 강조한 것으로는 보이지 않네요. - 임인택

같은 코드도 가독성이 작업 환경에 따라 달라지는가?

위에서 이야기한 것 중 터미널 화면에서의 작업시 세로라인의 범위가 좁은 경우 { } 가 가독성을 해칠수 있다는 의견이 있습니다. 재미있는 의견 같네요.

전에 여러 회사의 팀들 분들과 이야기를 하면 사람들마다 얼마나 취향차들이 다른가에 대해서 느끼는데, 한편으로는 그냥 개인의 취향차로만 보기에는 그 분들의 작업 환경에 따라 차이가 있는 듯 합니다. 일례로, Refactoring 개념이 개발자들에게 퍼진 이후 메소드는 가능한 한 짧고 간결하며 한가지 기능만을 하는게 가독성과 모듈디자인상 좋다고 이야기합니다. 근데, 리눅스나 VI 에서 작업하시는 분들은 '너무 메소드 길이가 짧아도 안좋다.' 라던지 '리눅스의 xx 코드 본 적 있냐? 한페이지에 주욱 나오는게 정말 읽기가 좋다.' 'OO 디자인이 좋다고 하는데, 코드 분석하려면 이 화일 저 화일 돌아다니고 메소드들을 이리저리 돌아다녀야 하고 별로 안좋은거 같다' 라고 말씀하시는 분들도 있습니다.

그래서 추측을 했었는데, 자신이 쓰는 도구에 따라 같은 코드도 가독성에 영향을 받을 수 있겠다는 생각을 해봅니다. VI 등의 editor 들로 코드를 보는 분들이라면 아마 일반 문서처럼 주욱 있는 코드들이 navigation 하기 편합니다. (아마 jkl; 로 돌아다니거나 ctrl+n 으로 page 단위로 이동하시는 등) 이러한 경우 OO 코드를 분석하려면 이화일 저화일 에디터에 띄워야 하는 화일들이 많아지고, 이동하기 불편하게 됩니다. (물론 ctags 를 쓰는 사람들은 또 코드 분석법이 다르겠죠) 하지만 Eclipse 를 쓰는 사람이라면 코드 분석시 outliner 와 caller & callee 를 써서 코드를 분석하고 navigation 할 겁니다. 이런 분들의 경우 클래스들과 메소드들이 잘게 나누어져 있어도 차라리 메소드의 의미들이 잘 분리되어있는게 분석하기 좋죠.

가독성을 생각할때 종종 이런 생각을 합니다. '어떠한 코드가 디자인이 좋은가? 혹은 어떠한 도구가 좋은 디자인을 이끌게 하는데 도움을 주는가?' 어떻게든 도구를 만들고, 다시 도구에 영향을 받게 되는게 사람이니까요. --1002




Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.1094 sec