- 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가 더 유연합니다.