[Python] Type Hinting

미남잉·6일 전
0

Advanced Python

목록 보기
6/10

Type Hinting

# 함수 정의 시 매개변수와 반환값에 타입 힌트를 제공
def myfunction(myparameter: int) -> int:
    return myparameter + 10

# 문자열 매개변수를 요구하는 함수
def otherfunction(otherparameter: str):
    print(otherparameter)

# 타입에 맞게 사용하면 mypy static checker에 통과
otherfunction(str(myfunction(20)))  # 명시적으로 str로 변환해줘야 mypy에서 오류 없음

Type Hinting (타입 힌트) 는 Python 3.5부터 도입된 기능으로, 코드에 타입 정보를 명시해주는 방식이다. (위 코드는 3.9 기준으로 작성된 코드이긴 합니다.)

Python은 동적 타입 언어이지만, 타입 힌트를 통해 더 안전하고 예측 가능한 코드 작성이 가능하다.

장점

  1. 코드 가독성 향상: 함수 사용 시 타입 인자와 반환값을 쉽게 파악 가능하다.
  2. 정적 분석 도구 활용 가능: mypy, pyright, pylance 같은 도구로 타입 검사 가능
  3. IDE 자동완성/검사 향상: VSCode, PyCharm 등에서 타입 기반 지원 강화
  4. 버그 방지: 의도하지 않은 타입 전달을 미리 탐지

기본 타입

def greet(name: str, age: int) -> str:
    return f"Hello, {name}. You are {age} years old."

name은 문자열, age는 정수형 인자만 받을 수 있다.

typing 모듈

모듈에서 지원하는 대표적인 타입 힌트 도구이다. -> Optional, Union, List, Dict

from typing import Optional, Union, List, Dict

def say_hello(name: Optional[str] = None) -> str:
    return f"Hello, {name or 'Guest'}"

def operate(value: Union[int, float]) -> float:
    return value * 2.5

def process_scores(scores: List[int]) -> float:
    return sum(scores) / len(scores)

def config(settings: Dict[str, Union[str, int]]) -> None:
    for key, val in settings.items():
        print(f"{key}: {val}")

Optional

from typing import Optional

def greet(name: Optional[str] = None) -> str:
    return f"Hello, {name or 'Guest'}"
  • Optional[X]X 또는 None을 받을 수 있다는 뜻
  • 사실 Optional[X]Union[X, None]의 축약형
name: Optional[str] = None  # 가능: None 또는 문자열
name = "Alice"              # 가능
name = None                 # 가능

Union

from typing import Union

def operate(value: Union[int, float]) -> float:
    return value * 2.5
  • Union은 여러 타입 중 하나를 허용할 때 사용
  • Union[int, float] → 정수 또는 실수 둘 다 허용
value: Union[int, str]
value = 10     # OK
value = "ten"  # OK
value = 3.14   # X (float은 안 됨)

List

from typing import List

def process_scores(scores: List[int]) -> float:
    return sum(scores) / len(scores)
  • List[X]X 타입의 요소들을 갖는 리스트를 뜻함
  • List[int]는 정수 리스트, List[str]는 문자열 리스트
scores: List[int] = [90, 80, 70]   # OK
scores = ["A", "B"]                # X (List[str]이 아님)

Dict

from typing import Dict, Union

def config(settings: Dict[str, Union[str, int]]) -> None:
    for key, val in settings.items():
        print(f"{key}: {val}")
  • Dict[K, V]는 키와 값의 타입이 각각 K, V인 딕셔너리를 뜻함
  • 위 예시는 키는 str, 값은 str 또는 int 허용
settings: Dict[str, Union[str, int]] = {
    "version": 1,
    "theme": "dark"
}

그 외에 tuple, set, Literal, Any, TypedDict, Callable 등 존재.

mypy main.py

mypy main.py을 통해 타입 검사가 가능하다. 타입 불일치 시 경고 출력 (런타임은 정상 수행 가능)

런타임에 강제되지 않기 때문에 mypy 같은 도구를 사용해야 하고, TypeError는 타입 힌트와 무관하다.

profile
Computer Vision Engineer

0개의 댓글

관련 채용 정보