본문 바로가기
프로그래밍언어/파이썬[중급]

[파이썬][중급] Chapter48. typing 모듈로 타입 지정 고도화

by about_IT 2025. 5. 25.
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