Python 유형 힌트: 정적 유형 지정 및 주석

Python에서 유형 힌트를 작성하는 방법을 알아보세요. 코드 품질을 개선하고, 자동 완성을 활성화하고, 정적 코드 분석을 위해 mypy를 활용하세요.

에디터에서 사용해 보세요

개요

Python은 역사적으로 동적으로 유형이 지정되는 언어입니다. 즉, 인터프리터가 런타임에 변수 유형을 추론하여 개발자에게 속도와 유연성을 제공합니다. 그러나 코드베이스가 커짐에 따라 이러한 동적으로 유형이 지정된 유연성으로 인해 문자열을 기대하는 함수에 목록을 전달하는 등 혼란스러운 런타임 버그가 발생할 수 있습니다. 이러한 격차를 해소하기 위해Python 3.5에서는 개발자가 코드에서 예상 유형을 명시적으로 문서화할 수 있도록 유형 힌트(유형 주석)를 도입했습니다.

유형 힌트는 Python이 코드를 실행하는 방식에 영향을 주지 않습니다. 인터프리터는 런타임에 이를 완전히 무시합니다. 대신, 그 가치는 정적 분석 및 IDE 도구에 있습니다. 변수, 함수 매개변수 및 반환 유형에 유형 주석을 추가함으로써 IDE는 정확한 자동 완성을 제공하고 즉시 유형 불일치 오류에 플래그를 지정할 수 있습니다. `mypy`와 같은 도구는 배포 전에 코드베이스를 검사하여 TypeScript 또는 Java와 같은 언어의 컴파일 타임 검사를 모방하여 정적으로 버그를 잡을 수 있습니다.

Python의 타이핑 기능은 광범위합니다. `str`, `int` 및 `bool`과 같은 기본 유형에 주석을 달거나 `list[str]`, `dict[str, int]` 및 `tuple[float, float]`와 같은 내장 `typing` 모듈(또는Python 3.9+의 표준 컬렉션)의 고급 유형을 사용할 수 있습니다. `Union`(또는Python 3.10+의 파이프 연산자 `|`)과 같은 기능을 사용하면 매개변수가 여러 유형을 허용하는 반면 `Optional[T]`는 특정 유형 또는 `None`이 될 수 있는 값을 나타냅니다. 유형 힌트를 구현하면 가독성과 팀 협업이 크게 향상됩니다.

코드 및 실행 출력

유형 주석이 포함된 함수를 작성하고 입력을 받는 방법을 검사합니다.

# Type annotations for function parameters and return values
def greeting(name: str, count: int) -> str:
    return f"Hello {name}! " * count

# Type hints on standard collections (Python 3.9+)
user_roles: dict[str, str] = {
    "admin": "Alice",
    "moderator": "Bob"
}

message = greeting("Jane", 2)
print(message)
print(f"Roles configured: {user_roles}")
터미널 출력
Hello Jane! Hello Jane! 
Roles configured: {'admin': 'Alice', 'moderator': 'Bob'}

단계별 구현

  • 대규모 팀 코드베이스의 통합 버그 방지
  • 복잡한 코드 프로젝트에서 IDE 코드 완성 활성화
  • 자체 문서화 API 구조 및 검증 스키마 생성

자주 묻는 질문

유형 힌트는 런타임 시 유형 안전성을 강화합니까?

아니요. 주석이 달린 힌트가 아닌 유형을 전달하는 경우 Python은 오류 예외를 발생시키지 않습니다. 유형 검사를 시행하려면 mypy와 같은 정적 검사기를 실행해야 합니다.

Any와 Union의 차이점은 무엇입니까?

Any는 변수에 대한 유형 검사를 비활성화하여 변수에 무엇이든 담을 수 있도록 합니다. Union(또는 T | U)은 변수를 특정하고 정의된 유형의 하위 집합으로 제한합니다.

관련 주제

권장 Python 리소스

관련 대화형 튜토리얼, 치트 시트, 코드 비교를 통해 지식을 확장하세요.