ToolActToolAct

Python 포맷 도구

Python 입력
출력
줄 수: 1문자 수: 0바이트 수: 0
줄 수: 1문자 수: 0

Python 포매팅이란?

Python 포매팅은 정리되지 않은 Python 코드를 표준화된 읽기 쉬운 형식으로 조직하는 과정입니다. 좋은 코드 포매팅은 가독성을 향상하고, 디버깅을 쉽게 하고, 오류를 줄입니다. Python은 인덴트로 코드 블록을 정의하므로, 올바른 포매팅이 특히 중요합니다. 포매팅에는: 일관된 인덴트, 적절한 줄바꿈, 연산자 스페이스가 포함됩니다. 압축은 모든 공백과 주석을 제거하고 파일 크기를 크게 줄입니다.

사용 방법

사용 방법

  1. 왼쪽 입력 상자에 Python 코드를 붙여넣거나 입력하세요
  2. 들여쓰기 크기를 선택하세요 (2칸, 4칸, 또는 Tab)
  3. '포맷'을 클릭하여 코드를 정리하거나, '축소'를 클릭하여 압축하세요
  4. 오른쪽에서 결과를 확인하세요 (구문 강조 포함)
  5. '복사'를 클릭하여 클립보드에 복사하세요

옵션 설명

들여쓰기 크기2칸, 4칸, Tab 들여쓰기 중 선택하세요. PEP 8은 4칸 들여쓰기를 권장합니다.
포맷적절한 들여쓰기와 줄 바꿈으로 코드를 정리하세요
축소공백과 주석을 제거하여 파일 크기를 줄이세요

Python 팁

  • Python은 들여쓰기에 민감하므로, 결과를 프로젝트에 다시 복사하기 전에 포맷된 제어 블록을 확인하세요.
  • 포맷팅은 타입 검사, import, 테스트를 실행하지 않습니다. 동작과 의존성 검증에는 평소 사용하는 Python 도구를 사용하세요.

활용 사례

붙여넣은 Python 코드를 문자열과 주석 보존하며 정리들여쓰기가 일정하지 않거나, 빈 줄이 너무 많거나, 채팅/위키/이슈에서 복사한 공백이 포함된 코드 조각에 포맷터를 사용하세요. 따옴표 문자열, 삼중 따옴표 블록, 주석을 보호한 뒤 들여쓰기를 정규화하므로 문서 텍스트와 인라인 노트가 실수로 재작성되지 않습니다. 출력은 README나 Stack Overflow 답변에 바로 넣어도 재포맷이 발생하지 않는 형태입니다.
코드 공유 전 간단한 괄호·문자열 오류 포착도구는 출력 전에 괄호, 대괄호, 중괄호의 짝과 닫히지 않은 삼중 따옴표 문자열을 검증합니다. 완전한 Python 인터프리터나 Black 대체품은 아니지만, 작은 예제, 수업, 지원 답변에서 명백한 구조적 실수를 잡아줍니다. 포맷터와 실제 린터를 CI에서 함께 사용하면 포맷터가 볼 수 없는 로직 수준의 문제를 잡을 수 있습니다.
가독성 있는 출력과 컴팩트한 한 줄 스니펫 전환포맷된 출력에 2칸, 4칸, 탭 중 선택하거나, 짧은 데모와 삽입용으로 세미콜론 구분의 컴팩트한 형태로 코드를 축소할 수 있습니다. 결과는 선택한 모드에 따라 포맷된 .py 또는 축소된 .py로 복사하거나 다운로드할 수 있습니다. 축소된 형태는 셸 한 줄 명령어나 짧은 이메일 서명에 삽입하기 편리합니다.
f-string과 삼중 따옴표 docstring 감사중첩 f-string, 정규식 샘플, 코드 블록이 포함된 삼중 따옴표 docstring을 포맷터에 통과시켜 중괄호와 따옴표가 균형을 이루는지 확인하세요. docstring 안의 예상치 못한 들여쓰기는 소스에서 앞쪽에 닫히지 않은 삼중 따옴표가 있음을 의미하는 경우가 많습니다. 포맷터가 눈으로 보기엔 올바른 코드 조각에 구문 분석 오류를 보고하면 원본을 주의 깊게 다시 확인하세요.
Black 88열 vs PEP 8 79열, autopep8/yapf/black 비교여기서 출력은 고정된 프로젝트 스타일이 아닌 구성 가능한 줄 폭을 사용합니다. Black이 선호하는 88열 대상은 더 컴팩트한 결과를 만들고, PEP 8 기본값인 79열은 autopep8과 대부분 에디터의 기본값입니다. Black은 엄격하고 구성 불가능하며, yapf는 Google 스타일이고 조정 가능하며, autopep8은 PEP 8 위반만 수정하고 코드를 재구성하지 않습니다. 이 브라우저 내 도구로 빠르게 정리한 뒤, CI에서 Black이나 Ruff를 실행하여 팀이 표준화한 스타일을 유지하세요.

기술 원리

Python은 중괄호 대신 들여쓰기로 코드 블록을 정의하는 몇 안 되는 주류 언어 중 하나이다. 같은 들여쓰기 수준의 연속 문장은 같은 블록에 속하며, 한 칸이라도 차이가 나면 의미가 바뀐다. 이 설계로 코드의 시각적 구조가 논리와 일치하지만, 포매터가 논리적 레벨을 정확하게 식별해야 한다. 포매터는 먼저 tokenize 모듈이나 사용자 정의 렉서로 코드를 스캔하여 각 줄의 선행 공백을 들여쓰기 정보로 처리한다. 괄호(소괄호, 대괄호, 중괄호) 안의 문장은 여러 줄에 걸칠 수 있으며, 이 경우 들여쓰기는 선행 공백이 아닌 괄호 깊이에 의해 결정된다. 문자열 리터럴(삼중 따옴표, 단일 따옴표) 내부의 공백은 건드리면 안 된다. 그렇지 않으면 문자열 값이 변경된다. PEP 8은 Python의 공식 스타일 가이드로, 4칸 들여쓰기, 줄당 최대 79자, 연산자 주변 공백, 그룹화된 import, 네이밍 규칙을 규정한다. Black은 설정 없는 포매터 학파의 대표적 예로, 이중 따옴표 문자열, 후행 쉼표, 88자 줄 길이를 강제하며 엄격하고 구성 불가능한 규칙을 적용한다. yapf는 Google 스타일에 가깝고 구성 가능하다.

  • 들여쓰기 의미: Python은 선행 공백으로 코드 블록을 결정. 같은 들여쓰기 = 같은 블록, 들여쓰기 변경 = 스코프 전환.
  • PEP 8 규칙: 4칸 들여쓰기, 줄 폭 79자, 연산자 주변 공백, 클래스명 CapWords, 함수명 snake_case.
  • 괄호 줄바꿈: 괄호(소괄호, 대괄호, 중괄호) 안의 문장은 줄바꿈 가능하며, 들여쓰기는 선행 공백이 아닌 괄호 깊이에 의해 결정.
  • 문자열 경계: 삼중 따옴표 문자열과 docstring 내부의 공백은 변경하면 안 되며, 그렇지 않으면 리터럴 내용이 깨짐.
  • Black 스타일: 제로 설정, 사용자 정의 불가, 이중 따옴표 강제, 후행 쉼표, 줄당 88자, 프로젝트 전체에서 동일.
  • 타입 어노테이션: PEP 484에서 도입. 포매터는 `->` 반환 타입과 매개변수 `: 타입` 어노테이션 주변의 적절한 공백을 보존.

예시

함수 정의 포매팅

입력: def add(a,b):
  return a+b


def subtract(a,b):
  return a-b
출력:
def add(a, b):
    return a + b


def subtract(a, b):
    return a - b

리스트 컴프리헨션 포매팅

입력: result=[x*x for x in range(10) if x%2==0]
result2={k:v for k,v in items if v>0}
출력:
result = [x * x for x in range(10) if x % 2 == 0]
result2 = {k: v for k, v in items if v > 0}

클래스 정의 포매팅

입력: class User:
  def __init__(self,name,email):
   self.name=name
    self.email=email
  def __repr__(self):
    return f"User({self.name})"
출력:
class User:
    def __init__(self, name, email):
        self.name = name
        self.email = email

    def __repr__(self):
        return f"User({self.name})"

자주 묻는 질문

어떤 Python 스타일을 사용하나요?

대부분의 빌드는 PEP 8 규칙을 따르며, 보통 Black을 사용합니다. 88열 줄 너비, 큰따옴표 문자열, 후행 세미콜론 없음. Black은 의견이 강해 대부분의 설정 옵션을 제거하여 프로젝트 전반에 일관된 스타일을 강제합니다. 더 유연성이 필요하면 autopep8과 yapf에 옵션이 더 많습니다.

포매터에 들여쓰기가 중요한가요?

네 — Python에서 들여쓰기는 블록 구조를 정의합니다. 포매터는 기존 블록 경계를 존중합니다. 입력에 탭/공백이 섞여 있거나 들여쓰기 수준이 잘못되었다면 포매팅 전에 파싱이 실패합니다.

import 순서도 정리해 주나요?

Black, autopep8, yapf는 공백만 처리합니다. import를 정렬하고 그룹화하려면 isort(또는 ruff --fix)를 사용하세요. 일부 페이지는 두 가지를 결합하므로, 실제로 무엇이 적용되는지 설정을 확인하세요.

타입 힌트도 지원되나요?

최신 파서는 지원합니다. 함수 시그니처, 변수, 클래스 속성에 적용된 타입 어노테이션(PEP 526, 484, 612)은 정확히 포매팅됩니다. 매우 새로운 문법(3.12+의 PEP 695 제네릭 문법)은 최신 파서가 필요하며, 이전 빌드에서는 처리하지 못할 수 있습니다.

내 코드가 업로드되나요?

아니요. 포매팅은 Python AST의 JavaScript 구현을 사용해 브라우저에서 실행됩니다. 붙여넣은 코드는 전송되지 않습니다.

결과가 CI의 black 결과와 일치하나요?

비슷하지만 항상 동일하지는 않습니다. Black 버전마다 포매팅이 약간 다를 수 있습니다(Black은 규칙을 정기적으로 업데이트합니다). CI 일관성을 위해 같은 Black 버전을 로컬과 CI에서 실행하시고, 이 페이지는 빠른 시각적 점검 용도로 활용하세요.

왜 긴 줄을 여러 줄로 감싸나요?

PEP 8과 Black은 한 줄당 88자 이하를 목표로 합니다. 긴 표현식, 인자가 많은 함수 호출, 체인된 메서드 호출은 가독성을 위해 여러 줄로 나뉩니다. 팀이 100자나 120자를 사용한다면 줄 너비 옵션을 조정하세요.