본문 바로가기

이생각 저생각

들여쓰기 100년 전쟁, Tab vs Space, 2글자 vs 4글자


- 방금전 트위터에 올린 글


코딩 컨벤션을 정하는 것은 굉장히 단순하면서도 굉장히 어려운 일인것 같습니다. 별것 아닌것 같은 규칙 하나가 개발에 대해 짜증을 만들게 하기도 하고, 편하고 즐겁게 만들어 주기도 하니까요.


그 중에서도 매우 오랫동안 논란의 끝에 있는 것 하나는 


띄어쓰기를 Tab으로 할꺼냐? 아니면 Space 할거냐? 

2자리로 할거나 4자리로 할거냐?


의 논쟁입니다.


이건 텍스트 에디터를 사용해서 프로그래밍이라는 걸 하기 시작한 이후부터 시작된 이른바 100년 전쟁에 가까운 논쟁입니다.


저 먼 옛날 Tab이 시작되었던 터미널과 Emacs, vi부터 이야기를 시작할 수도 있겠지만, 그런건 좀 지나가고, tab, untap정도는 자연스럽게 처리되는 상식적인 수준의 모던 에디터들을 사용한다는 가정하에서 이야기 해 보겠습니다.


그 중 에서도 특히 Tab과 Space 중 어느 것을 들여쓰기 문자, 띄어쓰기 문자로 사용할 것인가에 대해 이야기를 집중해 보겠습니다. 


(좋은 에디터들은 Tab과 띄어쓰기, 줄 이어쓰기에 각각 다른 간격을 줄 수 있는 시절이니까요)


엄격주의자(rigorist)적인 측면에서 좀 더 이야기를 해보겠습니다.


우선 들여쓰기(indentation)는 문맥(context)가 깊어지거나 이어주는 다음 줄이 현재 줄보다, 혹은 현재줄이 윗 줄보다 얼만큼 안쪽으로 들여쓰여질 것인가를 나타냅니다. 그리고 띄어쓰기는 말 그대로 간격을 얼만큼 줄 것인가에 대한 이야기로 엄격히는 이 둘은 다릅니다. 실제로 들여쓰기와 띄어쓰기를 구분해서 지정할 수 있는 에디터들이 있습니다. (대표적으로 Jetbrains의 intellij를 베이스로 하는 에디터들이 그렇습니다)


뭐, TAB은 '띄여쓰기'에 쓰이는 가장 대표적인 문장기호입니다. 단순히 간격을 띄운다고 생각하면 됩니다.

사실 이렇게 까지 구분해서 쓰는 건 조금 강박스럽습니다.


일반적인 보통사람 개발자 수준에서 이야기를 해 보겠습니다.


예전엔 8자리 띄워쓰기를 하는 경우도 있었지만, 지금은 보통 4자리 띄어쓰기가 기본입니다.

그러다 최근에는 스크립트 랭귀지 계열을 필두로 2자리 띄어쓰기가 많이 쓰이는 추세입니다.



4자 띄어 쓰기


2자 띄어쓰기


흔한 이유는 web개발시 html tag가 기본적으로 들여쓰기가 심하게 일어나기 때문이기도 하고,

클로저(closure)를 사용하는 언어들에서는 특히 들여쓰기가 많이 일어나기 때문에 줄당 평균 글자수를 확보하는 차원에서 2자리 띄어쓰기를 선호하는 경우가 많습니다.


하지만 시대의 흐름을 떠나 C, JAVA, C# 계열은 4자리 띄어쓰기가 기본으로 굳건히 자리잡고 있습니다.


전 4자리를 선호합니다. 왜냐하면 줄당 평균 글자수를 강제로 줄여주는 효과가 있기 때문에, 좀더 간결하게 작성하도록 유도해 주고, 폰트나 화면이 작은 경우 윗줄이나 아랫줄이 코드를 읽는데 눈이 덜 혼란스럽기 때문입니다.


이건 어디까지나 '타인의 취향'에 가까운 부분이니 그러려니 해주세요. : )


그럼 탭(Tab) 문자 vs 공백(space)문자 중에서는 어떤 것을 사용하는 것이 좋을까?


마찬가지로 취향의 문제에 가까운 부분이긴 합니다.

다만, 띄어쓰기가 언어의 핵심요소인 언어들이 있기 때문에, 공백과 탭을 섞어서 쓰는건 어느 편이든 공통적으로 금해야 한다고 말합니다.


ㅎ.. 얼릉 마무리 하고 집에가고 싶어졌습니다. 다음은 각각에 대한 선호자들의 논리입니다.

한번 보시고 이 글을 읽으시는 분은 어떤 편을 선호하시는지 알려주세요.



Tab vs Space



Tab이 좋다

--------------

- 자신의 취향에 맞게 간격을 조절해서 볼 수 있다.

공백 4자리는 탭에 비해 4배의 공간을, 2자리를 쓴다해도 2배의 전산 자원을 탭에 비해 소모한다.
(이게 전 세계적으로 따져보면 어마어마한 양의 전산 자원 낭비, 마그네틱 소재의 낭비기 된다)

- 나중에 띄어쓰기를 편집할때도 편하다. (백스페이스 한 번에 띄어쓰기 하나씩이 훅훅 지워진다)



Space가 좋다

------------

- 에디터와 상관없이 항상 동일하게 보인다.

- 예쁘게 정렬할 수 있고 깨지지 않는다.

  예)

var name    = 'John'

    , address = 'Chicago'

    , tel     = '012-12310213';

- 창 분할 에디터 사용할 때 유리하다



4글자 vs 2글자


4글자 띄어쓰기

----- 

- 4글자가 익숙하다

- 2글자는 글자가 작으면 들여쓰기가 잘 눈에 띄지 않는다.

- 남들이 4글자 쓰더라.

- 한 줄에 더 적은 글자가 들어가도록 유도해 준다.


2글자 띄어쓰기

-----

- 4글자는 간격이 멀어서 읽기가 불편하다.

- 4글자에 비해 절반만 자리를 차지한다.

- 남들이 2글자 쓰더라.

- 한줄에 더 많은 글자를 타이핑 할 수 있다.


기타 계열

-------

- 그래서 우린 3글자 띄어쓰길 한다. - some c/c++ 유저

- 우린 상관없다. 어차피 출시때는 코드 줄이기(minify)나 코드 난독화(Obfuscation) 쓴다.
(그래서 디버그때 코피터진..)

- 전통적으로 tab은 8자인거다!

- 20년 전에도 싸웠던 내용이다. 이제 그만 좀...

- 프로젝트에서 누군가 정한것이 정답! 내 뇌는 유연하다!


참고...

An Eternal Holy War http://www.jwz.org/doc/tabs-vs-spaces.html

tabs or spaces? http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=3978

Tabs Versus Spaces http://c2.com/cgi/wiki?TabsVersusSpaces

그 외 수많은 포럼들...