보통 프로그래머들은 코드를 쓸 때 예를 들어 들여쓰기에는 탭 대신 스페이스를 사용하는 등(또는 그 반대) 자기만의 관례에 따른다. 이러한 관례는 프로그래밍 언어와 조직, 그리고 개발자마다 다를 수 있다. 그렇다면 가장 일반적으로 통용되는 관례는 무엇일까? 최근 깃허브(GitHub) 데이터 챌린지를 통해 선보인 새로운 도구를 사용하면 가장 널리 사용되는 코딩 관례를 파악할 수 있다. 변정훈의 파퓰러 컨벤션(Popular Convention)이라는 도구는 깃허브에 제출된 수백만 건의 최근 데이터를 통해 여러 가지 주요 프로그래밍 언어에서 프로그래머들이 따르는 공통적인 관례를 추려냈다. 이 도구를 사용해서 대다수 개발자들이 동의하는 9가지 코딩 관례를 살펴보자. editor@itworld.co.kr
탭보다는 스페이스 코드를 들여쓰기할 때 스페이스를 쓰느냐 탭을 쓰느냐는 오랜 논쟁거리다. 그러나 7가지 언어(자바스크립트, 자바, 파이썬, 스칼라, 루비, C#, PHP)에 대해 제출된 700만 건 이상의 깃허브 데이터를 바탕으로 보면 탭보다는 확실히 스페이스가 많이 사용된다. 탭에 비해 스페이스가 많이 사용되는 언어 순서는 스칼라(96%), 루비(95%), 파이썬(95%), C#(82%), 자바스크립트(81%), 자바(74%), PHP(70%)다.
라인 최대 길이는 80자 라인 최대 길이 80자는 IBM 펀치 카드와 초기 모니터 시절까지 거슬러 올라가는, 컴퓨터와 프로그래밍 분야의 오랜 전통이다. 더 크고 해상도도 높은 모니터가 사용되는 요즘에는 라인 길이도 충분히 더 늘어날 법하다. 그러나 한 라인의 길이를 80자 미만으로 한다는 관례는 아직도 확고하게 지켜지고 있는 것으로 보인다. 6가지 언어(자바, 파이썬, 스칼라, 루비, C#, PHP)에 대해 깃허브에 제출된 500만 건 이상의 응답 데이터 중에서 이 관례에 따른다는 경우가 92%에 이르렀다. 6%는 120자를 제한으로 둔다고 답했으며 150자를 제한으로 둔다는 개발자는 2%에 불과했다.
빈 괄호는 생략 보통 함수 또는 메소드를 정의하거나 호출할 때 인수는 괄호 안에 들어간다. 그러나 일부 프로그래밍 언어에서는 괄호 사용 여부를 개발자가 선택할 수 있다. 어떤 프로그래머들은 가독성을 위해 여전히 괄호를 포함하는 편을 선호하지만 루비 개발자들의 경우 인수가 없는 경우(즉, 괄호가 빈 괄호가 되는 경우) 괄호를 생략할 수 있다는 데 확실히 의견을 일치한다. 23만 9,000건의 깃허브 응답 데이터 중 98%가 이 경우 괄호를 생략한다고 한다. 즉, def some_method # do something… end 위의 코드가 아래 코드보다 선호된다. def some_method() # do something… end
인수 정의 앞뒤로 스페이스 두지 않기 일부 개발자들은 함수 선언에서 인수 앞뒤로 스페이스를 넣으면 코드 가독성이 높아진다고 생각한다. 예를 들면 다음과 같다. function fn( arg1, arg2 ) { // … } 그러나 자바스크립트, 자바, C#, PHP 코드에 대한 150만 건의 깃허브 응답 데이터 중 94%는 인수 앞뒤로 스페이스를 넣지 않는다고 한다. 즉, 다음과 같다. function fn(arg1, arg2) { // … } 확실히 스페이스를 넣지 않는 쪽이 대세다.
처음이 아닌 마지막에 쉼표 여러 라인에 걸쳐 일련의 값을 정의할 때(예를 들어 행렬) 일부는 가독성과 디버깅, 유지 보수 효율성을 높이기 위해 다음과 같이 각 라인 시작 부분의 값 사이에 쉼표를 넣는다. var obj = { foo: 1 , bar: 2 , baz: 3 }; 그러나 적어도 자바스크립트 부문에서는 라인의 끝에 쉼표를 넣는 것이 관례로 보인다. 자바스크립트에 대해 깃허브에 제출된 100만 건의 응답 데이터 중 처음이 아닌 마지막에 쉼표를 넣는다는 쪽이 92%에 달한다. var obj = { foo: 1, bar: 2, baz: 3 };
스네이크_케이스(snake_case)보다 캐멀케이스(camelCase) 규칙을 선호 프로그래밍에서 가장 어려운 부분 중 하나가 변수, 클래스, 메소드 등의 이름 짓기라는 데 많은 프로그래머가 공감할 것이다. 그런데 이름을 지을 때 대소문자 표기 방식에 있어서는 의견이 분분하다. 예를 들어 캐멀케이스(camelCase), 스네이크_케이스(snake_case), 파스칼케이스(PascalCase) 중에서 무엇을 사용해야 할까? PHP의 함수 명명 또는 스칼라의 메소드 명명에 있어서는 웬만큼 합의가 이루어진 듯하다. 23만 7,000건의 깃허브의 응답 데이터 중 캐멀케이스가 87%를 차지하며 스네이크_케이스(11%)와 파스칼케이스(2%)는 훨씬 뒤쳐진다. 모두_대문자_스네이크_케이스(ALL_CAPS_SNAKE_CASE)와 스네이크_파스칼_케이스(Snake_Pascal_Case)도 사용되지만 비중은 응답 데이터의 1% 미만이므로 이 차트에는 나오지 않았다.
중괄호만으로 구성되는 라인은 없음 클래스, 메소드 또는 제어 구조와 같은 코드 블록을 작성할 때 프로그래머들은 중괄호(여는 괄호)를 자체 라인으로 만들지, 선언문과 같은 라인에 넣을지 결정해야 한다. 즉, class Foo { // … } 위와 같은 형태가 있고, class Foo { // … } 이러한 형태가 있다. 자체 라인으로 만드는 편이 더 명확하고 깔끔하다는 사람들도 있고, 그렇게까지 할 필요는 없다는 사람들도 있다. 자바, C#, PHP에 대한 150만 건의 깃허브 응답 데이터를 바탕으로 보면 중괄호를 자체 라인으로 만드는 경우는 30%에 불과했다. 따라서 중괄호를 자체 라인으로 만들지 않는 것이 확실한 관례로 보인다.
큰따옴표보다는 작은따옴표 자바스크립트에서 문자열을 사용하는 경우 작은따옴표나 큰따옴표를 쓸 수 있다. 예를 들면 다음과 같다. 작은따옴표: var foo = ‘bar’; 큰따옴표: var foo = “bar”; 어느 것을 사용하느냐는 결국 개인 취향이다. 작은따옴표를 사용하는 경우 문자열 내의 다른 작은따옴표(예를 들어 ‘That’s it!’과 같은 축약형의 작은따옴표)를 이스케이프해야 한다는 이유로 큰따옴표를 선호하는 사람들도 있다. 자바스크립트 코드에 대한 160만 건의 깃허브 응답 데이터를 보면 차이가 크지는 않지만 작은따옴표(57%)가 큰따옴표(43%)보다 많이 사용되는 것으로 나타났다.
상수 이름은 모두 대문자로 전통적으로 많은 프로그래머들이 상수 이름을 모두 대문자로 입력해왔다. 코드를 보는 사람이 상수를 쉽게 알아볼 수 있도록 하기 위해서다. 그러나 이것을 시대착오적인 방식으로 보는 사람들도 있다. 자바, C#, PHP 코드에 대한 35만 건의 깃허브 응답 데이터를 보면 전체 대문자가 아직은 더 선호되지만, 그 차이가 크지는 않다. (53% 대 47%)