728x90
타입 힌트를 더욱 정교하게 작성하기 위해 파이썬은 typing
모듈을 제공합니다. 이 모듈을 활용하면 함수, 변수, 클래스 등 다양한 위치에서 명확하고 안전한 타입 정보를 정의할 수 있으며, 정적 타입 검사 도구와 연계해 코드 품질을 높일 수 있습니다.
● 리스트, 딕셔너리, 튜플 타입 지정
from typing import List, Dict, Tuple
def process(data: List[int]) -> int:
return sum(data)
info: Dict[str, int] = {"age": 30, "score": 100}
coords: Tuple[float, float] = (37.5, 127.0)
Python 3.9 이상에서는 list[int]
, dict[str, int]
처럼 기본 자료형에 직접 타입 지정도 가능합니다.
● Optional과 Union
from typing import Optional, Union
def get_name(id: int) -> Optional[str]:
return "Alice" if id == 1 else None
def read_value(x: Union[int, str]) -> str:
return str(x)
Optional
은 None이 될 수 있음을 명시하며, Union
은 여러 타입 중 하나를 허용합니다.
● Callable: 함수 타입 지정
from typing import Callable
def execute(op: Callable[[int, int], int], x: int, y: int) -> int:
return op(x, y)
def add(a: int, b: int) -> int:
return a + b
print(execute(add, 2, 3)) # 5
Callable
은 인자 타입 리스트와 반환 타입을 명시하여 함수 타입을 정의합니다.
● Literal로 고정된 값 지정
from typing import Literal
def get_status(code: Literal["ok", "error", "unknown"]) -> str:
return f"상태: {code}"
Literal은 특정 값만 허용하도록 제한할 수 있어 API 응답 처리 등에 유용합니다.
● TypeAlias와 NewType
from typing import NewType
UserId = NewType("UserId", int)
def get_user(uid: UserId) -> str:
return f"User ID: {uid}"
NewType은 의미상 구분되는 새로운 타입을 정의할 수 있어 의도를 명확히 하고 실수를 방지합니다.
● 마무리
typing
모듈을 적극 활용하면 코드에 대한 문서화와 정적 분석의 품질이 크게 향상됩니다. 팀 개발이나 유지보수가 필요한 프로젝트에서는 명확한 타입 힌트와 함께 mypy, pyright 같은 도구를 병행 사용하는 것을 추천합니다.
728x90
'프로그래밍언어 > 파이썬[중급]' 카테고리의 다른 글
[파이썬][중급] Chapter50. 중급 문법 총정리 및 실전 팁 (0) | 2025.05.25 |
---|---|
[파이썬][중급] Chapter49. contextlib로 with문 확장하기 (0) | 2025.05.25 |
[파이썬][중급] Chapter47. enum 클래스와 열거형 처리 (0) | 2025.05.25 |
[파이썬][중급] Chapter46. 데이터 클래스와 필드 설정 (dataclasses) (0) | 2025.05.25 |
[파이썬][중급] Chapter45. CSV 파일과 pandas의 통합 활용 (0) | 2025.05.24 |