python

[파이썬 / python] PEP 8 - 코드를 읽기 쉽게 작성해보자

카방찐 2025. 1. 23. 20:21

1. 들여쓰기 (Indentation)

  • 기본적으로 공백(스페이스) 4칸을 사용한다.
  • 탭(Tab)과 공백을 섞어서 쓰지 않는 것이 좋다.
def example_function():
    # 4칸 공백으로 들여쓰기
    message = "Hello, PEP 8"
    print(message)

2. 최대 줄 길이 (Maximum Line Length)

  • 한 줄에 79자를 넘기지 않는 것을 권장한다.
  • 주석이나 도큐멘테이션 문자열은 한 줄에 72자 이하로 제한하는 것을 권장한다.
  • 코드가 너무 길어지면 백슬래시(\)나 괄호 등을 사용해 적절히 줄을 나눈다.
print("이 문장은 79자를 넘지 않도록 적절히 줄 바꿈을 해줘야 한다. "
      "PEP 8 스타일 가이드를 준수하기 위해서다.")

3. 공백 (Whitespace) 사용

  • 괄호, 쉼표, 콜론, 세미콜론 앞뒤에는 불필요한 공백을 두지 않는다.
  • 할당 연산자(=), 비교 연산자(==), 산술 연산자(+, - 등)는 앞뒤로 1칸의 공백을 두는 것을 권장한다.
  • 함수 호출의 인자나 리스트, 딕셔너리 정의 시에는 상황에 따라 붙여 쓰는 경우가 많다.
# 권장
spam(ham[1], {eggs: 2})
x = x + 1

# 비권장
spam( ham[ 1 ], { eggs : 2 } )
x=x+1

4. 빈 줄 (Blank Lines)

  • 함수나 클래스 정의 사이에는 빈 줄을 두 줄 넣는다.
  • 클래스 내 메서드 사이에는 빈 줄을 한 줄 넣는다.
class MyClass:
    def method_one(self):
        pass

    def method_two(self):
        pass


def my_function():
    pass


def another_function():
    pass

5. 임포트 (Imports)

  • 임포트는 파일 상단에 몰아서 작성한다.
  • 파이썬 표준 라이브러리, 서드파티 라이브러리, 로컬 라이브러리 순으로 구분해 정리한다.
  • 한 줄에서 여러 모듈을 임포트하기보다는 한 줄에 하나씩 작성하는 것이 좋다.
import os
import sys

import requests

from my_local_module import MyLocalClass

6. 함수와 클래스의 명명 규칙 (Naming Conventions)

  • 함수 이름은 소문자와 밑줄(_)을 사용하는 스네이크 케이스를 권장한다 (예: my_function).
  • 변수 이름도 소문자와 밑줄을 사용한다 (예: my_variable).
  • 클래스 이름은 각 단어의 첫 글자를 대문자로 쓰고, 단어를 붙이는 파스칼 케이스를 권장한다 (예: MyClass).
  • 상수(변경되지 않는 값)는 모두 대문자로, 단어 사이는 밑줄로 구분한다 (예: MAX_SIZE, TOTAL_COUNT).

7. 문자열 따옴표 (Quotation)

  • 일관적으로 '(싱글 쿼트)나 "(더블 쿼트)를 사용한다.
  • 문자열 안에 다른 종류의 따옴표를 포함해야 할 때, 이스케이프를 줄이기 위해 적절한 따옴표를 선택하기도 한다.
msg = "Hello, world!"
other_msg = 'Python says "Hello"'

8. 모듈의 구조 (Structure of the Code)

  • 보통 파이썬 파일(모듈)의 구조는 아래 순서를 따른다.
    1. 모듈 주석 혹은 독스트링
    2. 임포트
    3. 전역 변수, 상수
    4. 클래스 정의
    5. 함수 정의
    6. if __name__ == "__main__": 블록

9. 주석 (Comments)

  • 코드와 동기화가 잘 맞아야 하며, 의미 없는 주석은 피한다.
  • 핵심만 간결하게 적는 것이 좋다.
  • 함수와 클래스에 대한 설명은 도큐멘테이션 문자열(독스트링)을 활용한다.

10. 도큐멘테이션 문자열 (Docstring)

  • 함수, 클래스, 모듈의 맨 위에 작성해 사용 목적과 인자, 반환값 등을 설명한다.
  • 보통 삼중 따옴표(""")로 감싸고, 여러 줄로 작성한다.
def my_function(param1, param2):
    """
    이 함수가 하는 일에 대한 간단한 설명을 적는다.
    
    :param param1: 설명
    :param param2: 설명
    :return: 반환 값에 대한 설명
    """
    return param1 + param2

이 내용들은 PEP 8에서 권장하는 대표적인 규칙들을 요약한 것이다.

실제 프로젝트에서는 flake8, black, pylint 같은 도구를 통해 PEP 8 준수 여부를 검사하고, 자동으로 코드 스타일을 맞출 수 있다.

PEP 8을 지키면 협업 시 코드 일관성이 좋아지고, 가독성과 유지보수성이 향상된다는 장점이 있다.