질문의 배경: 타입 힌트는 파이썬 3.5 (PEP 484)에서 정적 코드 분석, 자동 완성, 리팩토링 및 자동 문서를 지원하기 위해 도입되었습니다. 이전에 파이썬은 강력한 타입 없이도 잘 작동했지만, 프로젝트와 팀의 성장에 따라 코드 품질을 높이기 위해 필요해졌습니다.
문제: 타입 주석은 개발자와 외부 도구(mypy, Pyright 등)를 위한 단순한 힌트일 뿐이며, 인터프리터는 실행 중에 이를 무시합니다. 오류는 다음과 같은 경우에 자주 발생합니다:
해결책: 함수와 변수에 대한 타입 주석을 사용하여 가독성과 Linter 및 IDE의 코드 분석을 용이하게 합니다. 주석에만 의존하지 말고 정적 타입 체크기를 사용하는 것이 필요합니다. 예:
def greeting(name: str) -> str: return f"Hello, {name}" def sum_nums(nums: list[int]) -> int: return sum(nums)
더 복잡한 예는 typing 모듈을 사용합니다:
from typing import List, Dict, Optional def process(data: List[Dict[str, Optional[int]]]) -> None: ...
주요 특징:
파이썬 인터프리터는 실행 중에 주석의 타입을 처리합니까?
아니요. 주석은 __annotations__를 통해 접근 가능하지만, 실행 중 동작을 제어하지 않습니다.
주석이 있는 함수에서 주석 없는 변수를 사용할 수 있습니까?
예. 주석은 필수가 아니지만, 없으면 혼란을 줄 수 있습니다.
주석 후에 변수의 타입을 재정의할 수 있습니까?
예, 하지만 이는 정적 분석의 본질을 위반하고 Linter에 방해가 됩니다. 이런 것은 피하는 것이 좋습니다:
x: int = 5 x = '문자열' # Linter가 경고를 하지만 코드가 실행됩니다.
부정적인 사례: 함수를 주석 처리했지만 실제로는 주석의 타입과 다른 타입이 반환되어 함수의 로직이 변경됨. 장점:
긍정적인 사례: 모든 함수와 데이터가 주석이 달려 있으며, CI/CD에서 mypy로 프로젝트가 검토됨. 장점: