콘텐츠로 건너뛰기

쉽게 이해하고 적용하는 법: PEP 8 가이드라인!

[

PEP 8를 따라 아름답게 Python 코드를 작성하는 방법

PEP 8은 Python 코드를 작성하는 방법에 대한 지침과 권장사항을 제공하는 문서입니다. 이 문서는 2001년에 Guido van Rossum, Barry Warsaw, Alyssa Coghlan에 의해 작성되었으며, PEP 8의 주요 목표는 Python 코드의 가독성과 일관성을 향상시키는 것입니다.

이 튜토리얼의 끝까지 따라오면 다음을 할 수 있습니다:

  • PEP 8에 따른 Python 코드 작성
  • PEP 8에서 제시된 지침의 이유 이해하기
  • 개발 환경을 설정하여 PEP 8을 준수하는 Python 코드를 작성할 수 있습니다.

PEP은 Python Enhancement Proposal의 약자로, 많은 PEP가 있습니다. 이 문서들은 주로 Python 언어를 위한 새로운 기능을 제안하지만, 일부 PEP들은 디자인과 스타일에 초점을 맞추어 커뮤니티를 위한 자료로 사용됩니다. PEP 8은 이러한 스타일에 초점을 맞춘 PEP 중 하나입니다.

이 튜토리얼에서는 PEP 8에서 제시된 주요 지침을 다룰 것입니다. 초급자부터 중급 프로그래밍 주제까지 다룰 예정이며, 더 고급 주제를 알고 싶다면 전체 PEP 8 문서를 읽어보시기 바랍니다.

PEP 8의 필요성

”가독성은 중요하다.”

  • The Zen of Python

PEP 8은 Python 코드의 가독성을 향상시키기 위해 만들어졌습니다. 그러나 가독성이 왜 중요한 것일까요? 왜 가독성 좋은 코드가 Python 언어의 지표 원칙 중 하나일까요?

Guido van Rossum은 “코드를 읽는 횟수가 쓰는 횟수보다 훨씬 많다”고 말했습니다. 사용자 인증 처리를 위한 코드를 몇 분 또는 하루 동안 작성할 수도 있습니다. 코드를 작성한 후에는 해당 코드를 다시 작성할 일은 없을 것입니다.

하지만 코드를 다시 읽어야 할 일은 분명히 있을 것입니다. 그 코드는 여전히 작업 중인 프로젝트의 일부로 남아있을 수 있습니다. 그 파일로 돌아갈 때마다 해당 코드가 무슨 일을 하는지, 왜 해당 코드를 작성한 것인지 기억해야 할 것입니다.

PEP 8은 이러한 이유로 중요합니다. 가독성이 뛰어난 코드는 다른 사람이 코드를 읽을 때 이해하기 쉽고 유지 및 보수하기 쉽습니다. 또한 자신이 작성한 코드를 다시 읽을 때도 코드의 의도를 명확하게 파악할 수 있습니다.

PEP 8에 따라 코드를 작성하면 코드의 일관성이 향상되며, 코드베이스 전체에서 동일한 스타일을 사용하여 협업을 더욱 쉽게 할 수 있습니다. 또한 PEP 8 준수 코드는 보다 읽기 쉽고 이해하기 쉽게 구성되어 있기 때문에 버그를 수정하거나 기능을 추가할 때 코드의 일부를 수정하는 작업이 더욱 쉬워집니다.

PEP 8으로 작성된 코드는 Python 커뮤니티에서도 더욱 쉽게 이해하고 수용될 수 있습니다. 커뮤니티에서 PEP 8을 준수하는 코드라고 알아볼 수 있으며, 이러한 코드는 더 적극적으로 협력하고 도움을 받을 수 있습니다.

이제 PEP 8의 주요 지침을 하나씩 살펴보겠습니다. 이 지침들은 코드 네이밍, 코드의 레이아웃, 들여쓰기, 주석, 공백 등 다양한 측면에 대한 내용을 다루고 있습니다. 따라서 PEP 8을 잘 숙지하고 코드에 적용하여 더 아름다운 Python 코드를 작성할 수 있습니다.

네이밍 규칙

Naming Styles

PEP 8에서는 변수, 함수, 클래스, 모듈 등에 사용되는 이름의 스타일을 제시합니다. 이는 코드의 가독성을 높이고 일관성을 유지하기 위한 것입니다. PEP 8에서는 다음과 같은 몇 가지 기본적인 네이밍 스타일을 제시하고 있습니다:

  • 소문자와 밑줄을 사용하는 lowercase_with_underscore: 변수, 함수, 모듈, 패키지 등에 사용되는 이름에 적합합니다.
  • 소문자와 밑줄을 사용하는 임포트 모듈은 짧은 이름을 사용하며, 충돌이 발생하지 않도록 주의해야 합니다.
  • 소문자와 밑줄을 사용하는 함수와 메서드: 함수와 메서드의 이름은 소문자와 밑줄을 사용해서 적합하게 작성해야 합니다. 예를 들어 calculate_average()와 같은 형태입니다.
  • 대문자와 밑줄을 사용하는 CAPS_WITH_UNDERSCORE: 상수에 적합한 이름 스타일입니다. 상수는 값을 변경하지 않고 유지되는 변수를 의미합니다.

이름 선택 방법

PEP 8에서는 변수, 함수, 클래스, 메서드, 모듈 등에 사용되는 이름을 선택하는 방법에 대한 권장사항을 제공합니다. 이러한 권장사항을 따르면 읽기 쉽고 이해하기 쉬운 코드를 작성할 수 있습니다. 다음은 PEP 8에서 제시된 몇 가지 기본적인 이름 선택 방법입니다:

  • 네이밍에 의미를 부여하세요: 변수나 함수의 이름은 해당 변수나 함수가 하는 일을 나타내도록 선택해야 합니다. 이름 만으로 변수나 함수의 의미를 파악할 수 있도록 해야 합니다.
  • 짧은 이름보다는 긴 이름을 사용하세요: 코드의 가독성을 향상시키기 위해 의미 있는 이름을 사용하세요. 이름이 너무 짧으면 이해하기 어렵고 혼란스러울 수 있습니다.
  • 예약어를 피하세요: Python에서 이미 사용 중인 예약어를 변수 또는 함수의 이름으로 선택하지 마세요. 이렇게 하면 예약어와 이름이 동일한 역할을 수행할 때 문제가 발생할 수 있습니다.
  • 이름의 일관성을 유지하세요: 코드의 가독성을 향상시키기 위해 다른 이름과의 일관성을 유지하세요. 코드 베이스 전체에서 일관성 있는 네이밍 스타일을 사용하여 혼란을 방지하세요.

코드 레이아웃

빈 줄

PEP 8에서는 코드의 가독성을 향상시키기 위해 빈 줄을 적절하게 사용하는 것을 권장합니다. 다음은 PEP 8에서 제시된 빈 줄 사용에 대한 몇 가지 지침입니다:

  • 함수와 클래스 사이에 빈 줄을 삽입하세요: 코드의 가독성을 높이기 위해 각 함수와 클래스 사이에 빈 줄을 추가하세요. 이렇게 하면 코드의 구조가 명확해지고 각 함수 또는 클래스가 서로 독립적인 단위로 인식됩니다.
  • 함수 내에서 빈 줄을 사용하세요: 함수 내에서 연관된 코드 블록 사이에 빈 줄을 추가하세요. 이렇게 하면 코드의 구조가 명확해지고 각 코드 블록이 독립적으로 인식됩니다.
  • 빈 줄은 너무 많이 삽입하지 마세요: 코드에 너무 많은 빈 줄을 삽입하면 가독성이 저하될 수 있습니다. 적절한 비율로 빈 줄을 삽입하세요.

최대 줄 길이와 줄 내리기

PEP 8에서는 코드의 가독성을 위해 최대 줄 길이와 줄 내리기를 규정합니다. 이는 코드를 보다 읽기 쉽고 이해하기 쉽게 만들 수 있는 방법입니다. 다음은 PEP 8에서 제시된 최대 줄 길이와 줄 내리기에 관한 권장사항입니다:

  • 한 줄의 최대 길이를 79자로 제한하세요: 너무 긴 한 줄의 코드는 가독성을 저하시킬 수 있습니다. 코드를 여러 줄로 나누어 읽기 쉽게 만들어야 합니다.
  • 괄호 안에서 줄 바꿈하기: 괄호 안에서 코드가 너무 길어지면 여러 줄로 나누어 읽기 쉽게 만들어야 합니다. 괄호 안에서는 연산자 다음에 줄을 내리고 들여쓰기를 추가해야 합니다.
  • 줄이 너무 길어질 때 줄 바꿈하기: 한 줄의 코드가 너무 길어서 읽기 어려울 때에는 여러 줄로 나누어 읽기 쉽게 만들어야 합니다. 줄 바꿈은 연산자 또는 콤마 다음에만 할 수 있습니다.

들여쓰기

탭 vs 스페이스

PEP 8에서는 코드를 작성할 때 들여쓰기에 탭 대신 스페이스를 사용하는 것을 권장합니다. 이는 코드의 일관성을 유지하고 다른 편집기에서도 동일한 들여쓰기를 적용할 수 있도록 합니다. 이러한 스타일 가이드를 따르면 코드를 더욱 일관되고 가독성 있게 작성할 수 있습니다.

줄 바꿈 후 들여쓰기

PEP 8에서는 줄 바꿈한 후에는 들여쓰기를 추가하는 방법을 규정합니다. 이는 코드의 구조를 명확히하고 가독성을 향상시키는 데 도움이 됩니다. 다음은 PEP 8에서 제시된 줄 바꿈 후 들여쓰기에 관한 권장사항입니다:

  • 대가호를 사용하여 줄 바꿈하기: 대가호를 사용하여 줄 바꿈 후에는 추가적인 들여쓰기를 해야 합니다. 이렇게 하면 들여쓰기된 줄이 다른 코드 블록과 구분되어 읽기 쉬워집니다.
  • 들여쓰기할 위치는 다음과 같습니다:
    • 주요 블록이나 스위트 이후: 주요 블록이나 스위트(예: if문의 조건식 다음) 뒤에는 들여쓰기를 추가해야 합니다.
    • 괄호 안의 라인 바꿈 이후: 괄호 안에서 줄을 바꾼 다음에도 추가적인 들여쓰기를 해야 합니다.

닫는 괄호 위치

PEP 8에서는 코드에 닫는 괄호를 어디에 위치하는지에 대한 규칙을 제시합니다. 이는 코드의 구조를 명확히하고 가독성을 향상시키는 데 도움이 됩니다. 다음은 PEP 8에서 제시된 닫는 괄호 위치 관련 권장사항입니다:

  • 각 괄호마다 새로운 줄을 시작하고 같은 수준으로 들여쓰기하기: 여는 괄호와 같은 수준으로 닫는 괄호를 작성하고 동일한 수준에서 들여쓰기를 추가하세요. 이렇게 만들면 각 괄호가 쌍으로 인식되고 코드의 구조를 알기 쉬워집니다.
  • 함수의 닫는 괄호는 함수 정의와 같은 수준에 작성하기: 함수의 닫는 괄호는 함수 정의와 같은 수준에서 작성하고 들여쓰기를 추가하세요. 이렇게 하면 함수의 시작과 끝이 명확히 구분되어 코드의 구조를 알기 쉬워집니다.

주석

블록 주석

PEP 8에서는 주석을 작성하는 방법에 대한 권장사항을 제시합니다. 주석은 코드의 가독성을 높이고 코드에 대한 설명을 추가하는 데 사용됩니다. 다음은 PEP 8에서 제시된 블록 주석 관련 권장사항입니다:

  • 블록 주석은 #로 시작하세요: 블록 주석은 # 기호로 시작하도록 작성하세요. 이렇게 하면 주석이 코드와 구분되어 읽기 쉬워집니다.
  • 블록 주석은 문단으로 작성하세요: 블록 주석은 한 문단 이상으로 작성해야 합니다. 긴 주석이나 여러 줄의 설명을 내용으로 포함하는 것이 좋습니다.
  • 블록 주석 앞에는 빈 줄을 추가하세요: 블록 주석 앞에는 빈 줄을 추가하여 주석을 코드로부터 구분하세요. 이렇게 하면 코드를 읽을 때 주석의 시작과 끝을 명확하게 알 수 있습니다.

인라인 주석

PEP 8에서는 인라인 주석을 작성하는 방법에 대한 권장사항을 제시합니다. 인라인 주석은 코드의 간단한 설명이나 주요한 세부사항을 나타내는 데 사용됩니다. 다음은 PEP 8에서 제시된 인라인 주석 관련 권장사항입니다:

  • 인라인 주석은 코드 뒤에 작성하세요: 인라인 주석은 주석을 설명하는 코드 뒤에 작성하는 것을 권장합니다. 주석은 코드의 오른쪽에 작성되도록 하여 가독성을 높일 수 있습니다.
  • 인라인 주석은 코드 옆에 작성하세요: 인라인 주석은 코드 옆에서 작성하는 것이 좋습니다. 주석 앞에 공백을 추가하지 않고 코드와 함께 작성되도록 해야 합니다.

문서화 문자열

PEP 8에서는 코드의 문서화 문자열 작성 방법에 대한 규칙을 제시합니다. 문서화 문자열은 모듈, 클래스, 함수 등의 문서화에 사용됩니다. 다음은 PEP 8에서 제시된 문서화 문자열 관련 권장사항입니다:

  • 문서화 문자열은 모듈과 클래스의 첫 번째 문장에 사용하세요: 모듈과 클래스의 첫 번째 문장에 문서화 문자열을 작성하는 것을 권장합니다. 이렇게 하면 모듈과 클래스에 대한 설명을 코드와 함께 표시할 수 있습니다.
  • 문서화 문자열은 함수와 메서드의 첫 줄에 사용하세요: 함수와 메서드의 첫 줄에 문서화 문자열을 작성하는 것을 권장합니다. 이렇게 하면 함수와 메서드에 대한 설명을 코드와 함께 표시할 수 있습니다.

표현식과 문장에서의 공백

이진 연산자 주변의 공백

PEP 8에서는 이진 연산자 주변의 공백을 추가하는 방법에 대한 권장사항을 제시합니다. 이러한 공백은 코드의 가독성을 향상시키는 데 도움이 됩니다. 다음은 PEP 8에서 제시된 이진 연산자 주변의 공백 규칙에 관한 권장사항입니다:

  • 이진 연산자 앞과 뒤에 공백을 추가하세요: 이진 연산자 앞과 뒤에 공백을 추가하여 코드의 가독성을 향상시킬 수 있습니다.

공백을 추가하지 않아도 되는 경우

PEP 8에서는 일부 경우에는 공백을 추가하지 않아도 되는 방법을 제시합니다. 이러한 경우는 코드의 가독성을 유지하면서 코드 양을 최소화하는 데 도움이 됩니다. 다음은 PEP 8에서 제시된 공백을 추가하지 않아도 되는 경우에 대한 권장사항입니다:

  • 괄호, 대괄호, 중괄호 사이에 공백을 추가하지 않아도 됩니다.
  • 콤마, 콜론, 세미콜론 뒤에 공백을 추가하지 않아도 됩니다.
  • 콤마 앞에도 공백을 추가하지 않아도 됩니다.

프로그래밍 권장사항

PEP 8에서는 Python 코드 작성 시 권장되는 몇 가지 프로그래밍 관례에 대해 제시합니다. 이러한 권장사항은 코드의 가독성과 일관성을 향상시키는 데 도움이 됩니다. 다음은 PEP 8에서 제시된 프로그래밍 권장사항입니다:

  • 임포트는 모듈의 상단에 위치시키세요: 모듈의 상단에 모든 임포트 문을 위치시키는 것이 좋습니다. 이렇게 하면 코드의 의미가 명확해지고 필요한 모듈을 찾기 쉬워집니다.
  • 클래스 내에 빈 줄을 추가하세요: 여러 클래스가 있는 경우 각 클래스 사이에 빈 줄을 추가하여 가독성을 향상시킬 수 있습니다.
  • 클래스 메서드는 첫 번째 인자로 self를 사용하세요: 클래스 메서드는 항상 첫 번째 인자로 self를 사용하여 해당 객체를 나타내도록 해야 합니다.
  • 클래스 메서드와 인스턴스 메서드 사이에 빈 줄을 추가하세요: 클래스 내에서 클래스 메서드와 인스턴스 메서드 사이에 빈 줄을 추가하세요. 이렇게 하면 코드의 구조가 명확해지고 각 메서드가 서로 독립적인 단위로 인식됩니다.

PEP 8을 무시해야 할 때

PEP 8에는 지침과 권장사항이 포함되어 있지만, 모든 경우에 규칙을 엄격하게 따를 필요는 없습니다. 특정 상황에서는 PEP 8을 무시하는 것이 더 적절할 수 있습니다. 다음은 PEP 8을 무시해야 할 때에 대한 몇 가지 예시입니다:

  • 기존 코드와의 호환성 유지를 위해: 기존 프로젝트나 라이브러리와의 호환성을 유지하기 위해 PEP 8을 무시해야 할 수 있습니다. 코드의 가독성을 저하시킬 수 있는 경우 PEP 8을 유지하고 코드를 수정해야 할 수도 있습니다.
  • 타사 라이브러리의 스타일 가이드를 따르기 위해: 타사 라이브러리와 협업하거나 타사 라이브러리를 사용하는 경우, 해당 라이브러리의 스타일 가이드를 따르는 것이 중요할 수 있습니다.
  • 특정 프로젝트의 스타일 가이드를 따르기 위해: 특정 프로젝트에서는 PEP 8을 따르지 않고 자체적인 스타일 가이드를 따를 수도 있습니다. 프로젝트의 가독성과 일관성을 유지하기 위해 해당 스타일 가이드를 준수해야 합니다.

PEP 8을 따르기 위한 팁과 요령

코드가 PEP 8을 따르는지 확인하고 준수하는 것은 간단한 작업이 아닐 수 있습니다. 그러나 다음 팁과 요령을 활용하면 코드가 PEP 8을 따르는지 확인하는 일이 더욱 쉬워집니다:

  • Linter 사용하기: Linter는 코드의 문제점을 감지하고 스타일 규칙을 준수하는지 확인할 수 있는 도구입니다. 예를 들어, flake8이나 pylint를 사용하여 코드를 검사할 수 있습니다.
  • Autoformatter 사용하기: Autoformatter는 코드를 자동으로 스타일 가이드에 맞게 포맷팅해줍니다. 예를 들어, black이나 autopep8을 사용하여 코드를 자동으로 포맷팅할 수 있습니다.
  • 통합 도구 사용하기: Linter와 Autoformatter를 결합한 통합 도구를 사용하면 코드를 확인하고 포맷팅할 수 있습니다. 예를 들어, flake8black을 함께 사용하여 코드를 검사하고 자동으로 포맷팅할 수 있습니다.

결론

PEP 8은 Python 코드 작성에 필요한 지침과 권장사항을 제공합니다. 코드를 PEP 8에 따라 작성하면 가독성과 일관성이 향상되며, 협업과 유지 보수에 도움이 됩니다. PEP 8을 따르면 Python 커뮤니티에서도 코드가 더욱 수용되고 협력하기 쉬워집니다.

앞서 살펴본 PEP 8의 주요 지침을 숙지하고 코드에 적용하여 아름다운 Python 코드를 작성해보세요. PEP 8을 따르는 코드는 가독성이 뛰어나고 이해하기 쉽게 구성되어 있으므로 버그 수정이나 기능 추가 작업이 더욱 수월해질 것입니다.

이제 PEP 8을 알고 있으니 Python 코드 작성의 기초를 다지고, 가독성이 뛰어난 아름다운 코드를 작성해보세요!