[python] Python에도 스타일이 있다

회사가 홍대에 위치해 있어 창 밖에 다양한 사람들이 지나가는 것을 볼 수 있다. 유심히 들여다보면 각자 다양한 옷을 입으며 거리를 돌아다니고 있다. 그것은 그들의 개성을 나타내는 하나의 ‘스타일'이다. 어떤 사람은 청바지를 좋아하기도 하며 어떤 사람은 모자를 쓰는 것을 좋아한다. 또 어떤 사람은 반대로 반지를 차는 것을 싫어할 수 있다.

코딩을 할때도 각자의 스타일이 있다. 어떤 사람은 한 라인에 여러 라이브러리들을 한꺼번에 불러 올 수 있으며 어떤 사람은 변수의 표기 방법을 자신의 스타일로서 구축할 수 있다.

하지만 코딩을 할 때 각자의 스타일을 내세우는 것보다 일정 규칙에 맞춘 하나의 스타일을 지키는 것이 좋다. 여기에는 다양한 이유가 있겠지만 한 줄로 요약하면 “읽고 쓰기 편하기 위해서" 이다.

PEP 8 / 코딩 스타일 가이드라인이란

그래서 존재하는 것이 코딩 스타일 가이드라인이다. 이는 코드를 작성할 때 개발자들이 코딩을 할 때 특정 형식으로 작성하자고 약속하는 것이다. 그 중에서도 PEP(Python Enhance Proposal 8)가 있다. 이 제안서에는

  1. 새로운 기능이나 구현을 제안하는 Standard Track
  2. 파이썬의 디자인 이슈나 일반적인 지침, 혹은 커뮤니티에의 정보를 제안하는 Informational
  3. 파이썬 개발 과정의 개선을 제안하는 Process

3가지로 구분할 수 있다. 특히 PEP8는 파이썬 코딩 스타일 가이드라인을 의미하며 파이썬 커뮤니티에 정보를 제안하는 Process에 해당된다. 간단히 PEP8의 내용은 다음과 같다.

  1. 들여쓰기는 공백 4개로 한다.
  2. 한 줄 최대 글자는 79자로 한다.
  3. 최상위(top-level) 함수와 클래스 정의는 2줄씩 띄어 씁니다.
  4. 파일은 UTF-8 또는 ASCII로 인코딩한다.
  5. 하나의 import에는 모듈 하나만 기재한다.
  6. import는 표준 라이브러리, 서드파티, 로컬 라이브러리 순서로 묶는다.
  7. 소괄호, 중괄호, 대괄호 사이에 추가로 공백을 입력하지 않는다.
  8. …..

이외에도 수많은 규칙들이 PEP8에 적혀있다. 이를 더 자세히 확인하려면 https://www.python.org/dev/peps/pep-0008 에서 확인할 수 있다.

내 프로젝트는 PEP8을 잘 따르고 있는가

이를 체크하기 위한 방법은 대표적으로 세가지가 존재한다.

git config를 통해 체크하는 방법

Python 프로그램을 git으로 관리한다는 전제 아래에 git config를 설정함으로서 문제를 해결할 수 있다. git에는 hook 이라는 것이 존재한다. hook은 git을 통해서 관리를 할때, 예를 들어, commit의 앞에 해야하는 일들 혹은 push 뒤에 해야하는 일들을 다양한 언어들을 통해서 작성하고 그 시점이 되었을때 작동되도록 하는 것이다.

#!/usr/bin/env bash

git diff --cached | pep8 --diff

단순하게 pre-commit 에 대한 스크립트를 짰다. 이를 project folder/.git/hooks/pre-commit 이라는 파일 이름으로 저장하도록 하면 커밋을 하기 전에 PEP8 형식에 맞는지 체크해줄 것이다.

라이브러리를 통해 체크하는 방법

Python의 문법을 체크하는 방법중 다양한 라이브러리들도 존재한다. 그 중에서도 Pylint(https://www.pylint.org/)라는 라이브러리를 이야기하려고 한다. Mac을 기준으로

pip install pylint

를 입력하면 설치는 완료된다. 또한 실행 방법은

pylint [filename.py]

라 입력하면 된다.

출처 : https://www.pylint.org/

PEP8을 기준으로 코드를 분석하며 에러를 발생하는 부분에 대해서도 분석해준다. 결과 화면은 위의 이미지처럼 나오게 된다.

PyCharm 에 한정되어 툴을 활용하는 방법

PyCharm 내 Preference PEP8 관련 화면

PyCharm에서는 기본적으로 PEP8 형식을 맞출 수 있도록 지원하고 있다. (맥 기준) PyCharm — preferences 내 Editor — Inspections에 PEP8 코딩 스타일을 체크하는 부분이 존재한다. 또한 기본적으로 체크되어 있어 있다. 만약 체크되어 있지 않다면 이 항목들을 체크하기 바란다. 설정이 완료되면 가이드라인을 안 지켰을 시 이를 지키도록 툴이 안내해주고 있다.

반드시 지킬 필요는 없다

하지만 어느 규칙이나 예외는 존재한다. PEP8 또한 예외 사항을 갖고 있다. 먼저 가독성을 해치는 경우이다. 실제로 규칙을 따랐는데도 코드가 눈에 안 들어오는 경우들이 있다. PEP8은 실제 다른 사람들의 가독성과 나 자신의 가독성을 위해 쓰이는 이유가 존재하기 때문에 이런 상황에는 쓰지 않는 것이 맞다.

또 하나는 PEP8을 적용하는 와중일 때이다. 당연하게도 이전에 규칙이 적용이 안되어 있는 프로젝트에서 PEP8을 적용하기 시작하면 코드들이 혼재한 것은 당연하다. 이런 때도 인정되는 상황이다.

코드를 적용할때 PEP8이 당연하게 적용되야 하고 이전보다 적용한 이후가 반드시 좋다고 생각하면 안된다. 본인이 프로젝트에 PEP8을 적용할때 얼마만큼 효용성이 있는지 생각해보면서 적용해보기 바란다.

참조 :

  1. http://www.hanul93.com/kicomav-pep8/
  2. https://spoqa.github.io/2012/08/03/about-python-coding-convention.html