Published on

10단계: 타입 힌트와 데이터 클래스

10-1. 타입 힌트 기본 문법

def add(x: int, y: int) -> int:
    return x + y
  • :은 매개변수 타입
  • ->는 반환 타입

10-2. 변수 선언 타입

name: str = "Alice"
age: int = 30

10-3. Optional, Union

from typing import Optional, Union

def say(name: Optional[str]):
    if name:
        print(name)

def calc(val: Union[int, float]) -> float:
    return val * 2

10-4. List, Dict, Tuple 타입 힌트

from typing import List, Dict, Tuple

names: List[str] = ["Tom", "Jane"]
person: Dict[str, int] = {"age": 20}
coords: Tuple[int, int] = (3, 4)

10-5. 데이터 클래스 (@dataclass)

from dataclasses import dataclass

@dataclass
class User:
    name: str
    age: int

자동으로 __init__, __repr__, __eq__ 메서드 생성됨


10-6. default 값과 init=False

@dataclass
class Product:
    name: str
    price: float
    stock: int = 0

10-7. NamedTuple과 TypedDict

from typing import NamedTuple, TypedDict

class Point(NamedTuple):
    x: int
    y: int

class UserDict(TypedDict):
    name: str
    age: int

10-8. 타입 체크 도구

  • mypy를 사용해 정적 분석 가능
pip install mypy
mypy script.py

요약

  • 타입 힌트로 함수, 변수, 클래스의 타입 명시 가능
  • Optional, Union, List, Dict 등 복합 타입 표현 가능
  • @dataclass는 간결한 데이터 구조 정의에 적합
  • NamedTuple, TypedDict로 구조적 데이터 표현 가능

심화학습

Q1. 타입 힌트를 사용하면 성능이 빨라지나요?
A1. 아니요, 타입 힌트는 실행 시 영향을 주지 않고, 코드 분석 및 유지보수 목적에 사용됩니다.


Q2. dataclass는 어떤 상황에서 사용하면 좋은가요?
A2. 단순한 속성만 가진 객체를 만들고자 할 때 boilerplate 코드를 줄일 수 있어 매우 유용합니다.


Q3. TypedDict는 어떤 상황에서 NamedTuple보다 적합할까요?
A3. 키 기반 접근이 필요하고, 일부 키가 선택적일 수 있는 경우 TypedDict가 더 유연합니다.