들여쓰기를 할 때 왜 space가 tab보다 권장될까?

토즐라·2022년 6월 18일
2

1D1Q

목록 보기
4/7
post-thumbnail

Question

들여쓰기를 할 때 왜 space가 tab보다 권장될까? 🤔


00. 개요

저는 프로그래밍을 할 때 들여쓰기가 필요하면 tab 을 이용합니다. Python 코드를 어떻게 구상할지에 대한 스타일 가이드인 PEP8을 읽다 들여쓰기를 할 때에는spacetab보다 권장된다는 가이드라인이 있어서 소개해 드리려고 합니다.

Spaces are the preferred indentation method.
Tabs should be used solely to remain consistent with code that is already indented with tabs.
Python disallows mixing tabs and spaces for indentation.

들여쓰기에는 space 를 이용하는 것이 권장되고, tab은 기존에 프로그램의 들여쓰기가 tab으로 되어 있어서 일관성을 유지해야 하는 경우에 한정해 써야 한다고 합니다. 또, tabspace의 혼용은 불가하다고 강조되어 있군요.

놀랍게도 spacetab보다 권장되는 경향은 다른 프로그래밍 언어인 Java에서도 존재합니다.

Tab characters are not used for indentation.
Google Java Style Guide

그렇다면 왜 많은 사람들은 tab보다 space를 쓰는 코드 컨벤션을 권장하는 것인지 차근차근 알아보겠습니다.


01. 들여쓰기 논쟁

찾아보니 들여쓰기를 어떻게 할 것인가는 프로그래머들 사이에서 꽤나 오랫동안 펼쳐진 논쟁이더군요.
프로그래머들은 크게는 tab 으로 들여쓰기를 할 것인가, space로 들여쓰기를 할 것인가 진영으로 나뉘고, 세부적으로는 또 tab을 얼만큼의 너비로 할 것인지, space 는 몇 개를 이용할 것인지 등으로 나뉘기도 합니다.

그럼 각 진영의 주장을 살펴보겠습니다.

Tab을 쓰는 이유

1. 용량 절약

tabspace는 모두 1회당 1byte의 용량을 차지합니다. 보통 프로그램에서는 2칸, 4칸 혹은 8칸의 들여쓰기를 사용하는데, 들여쓰기를 위해서 tab은 한 번만 치면 되지만, space는 여러 번 쳐야하므로 tab을 이용하는 것이 용량이 더 절약됩니다.

2. 편의성

비슷한 이유로 tab은 한 번만 쳐서 들여쓰기를 할 수 있기 때문에 space보다 편리합니다.

3. "근본"

파이썬을 제외하고 많은 프로그래밍 언어에서 들여쓰기는 오로지 코드의 가독성을 높여주기 위해 만들어진 장치입니다. 단어 사이를 분리하기 위해 만든 키인 space와 달리, tab키는 들여쓰기를 하기 위해 만들어진 키입니다. 따라서 들여쓰기를 할 때에는 tab을 이용해야 합니다.

Space를 쓰는 이유

1. IDE 독립적

tab을 이용하면 에디터마다 설정값대로 임의로 들여쓰기가 되는 반면, space 로 들여쓰기를 하게 되면 에디터가 달라도 코드는 같은 형식으로 보입니다. 따라서 에디터 환경이 달라지더라도 들여쓰기 형식을 따로 신경쓰지 않아도 되는 것이죠.

2. 많은 사람들이 씀

아래에 보여드리겠지만, 들여쓰기로 tab을 이용하는 프로그래머보다 space를 이용하는 사람들이 훨씬 많습니다. 프로그래밍은 협업하는 경우가 많으므로, 결국 코딩을 할 때 space를 이용하는 것이 코드의 일관성을 갖추기 쉽습니다.


02. 실제로 사람들은 무엇을 더 쓸까?

이 주제와 관련된 재미있는 깃허브 리포가 있어 가져와보았습니다.
깃허브 전체 커밋에서의 코드 컨벤션을 분석한 프로젝트인데요. 많은 프로그래머들이 tab대신 space를 이용하는 것을 알 수 있습니다.

03. 정리

들여쓰기를 할 때 왜 space가 tab보다 권장될까? 🤔

💡 에디터에 독립적이므로, space를 이용하는 것이 코드의 신뢰성을 높일 수 있다.
💡 코드 컨벤션에서 중요한 것은 일관성을 갖추는 것이다. 따라서, tab 들여쓰기를 선택하든, space 들여쓰기를 선택하든, 일관되게 이용해야 한다.

Reference

https://peps.python.org/pep-0008/
https://google.github.io/styleguide/javaguide.html
https://www.oracle.com/java/technologies/javase/codeconventions-contents.html
https://stackoverflow.com/questions/35649847/objective-reasons-for-using-spaces-instead-of-tabs-for-indentation
https://www.overops.com/blog/tabs-vs-spaces-how-they-write-java-in-google-twitter-mozilla-and-pied-piper/
https://kennethreilly.medium.com/tabs-vs-spaces-3c24defa7c9e
https://www.7pace.com/blog/programming-spaces-vs-tabs

profile
Work Hard, Play Hard 🔥🔥🔥

3개의 댓글

comment-user-thumbnail
2023년 7월 7일

tab 유저입니다. space가 tab 보다 사용하는 사람이 많다니... 충격이네요. 좋은 글 감사합니다!

답글 달기
comment-user-thumbnail
2023년 8월 19일

궁금하게 효자손으로 시원하게 긁어 해소된 느낌입니다. 👍

답글 달기
comment-user-thumbnail
2023년 10월 19일

좋은 글 감사합니다.

답글 달기