Python 기초집LESSON 18
dataclass와 타입 힌트
난이도입문
예상 시간30분
선수지식이전 강의
18강. dataclass와 타입 힌트
1. 이번 강의에서 해결할 문제
데이터 중심 클래스에 반복적인 초기화와 표현 코드를 작성하면 핵심 검증이 묻힙니다. dataclass가 보일러플레이트를 만들게 하고 타입 계약을 명시합니다.
2. 학습 목표
3. 핵심 개념
dataclass는 주석으로 선언한 필드를 바탕으로 __init__, __repr__, 비교 메서드를 생성합니다. 타입 힌트는 문서·편집기·점검 도구를 돕지만 Python이 자동으로 타입을 강제하지는 않습니다.
4. 단계별 코드 예시
파일 경로: C:\dev\game-log-analyzer\battle_analyzer\models.py
battle_analyzer/models.py
from dataclasses import dataclass
from typing import Literal
BattleResult = Literal["win", "loss"]
@dataclass(frozen=True, slots=True)
class BattleRecord:
player: str
monster: str
skill: str
damage: int
result: BattleResult
def __post_init__(self) -> None:
if self.damage < 0:
raise ValueError("피해량은 0 이상이어야 합니다.")
def total_damage(records: list[BattleRecord]) -> int:
return sum(record.damage for record in records)
파일 경로: C:\dev\game-log-analyzer\main.py
main.py
from battle_analyzer.models import BattleRecord, total_damage
records = [BattleRecord("Knight", "Slime", "Slash", 80, "win")]
print(records)
print(total_damage(records))
PowerShell · 실행
.\.venv\Scripts\python.exe .\main.py
5. 코드가 동작하는 이유
frozen=True는 생성 후 필드 대입을 막아 기록을 값처럼 다루게 합니다. slots=True는 허용 필드를 고정하고 메모리 구조를 단순화합니다. Literal은 허용 문자열을 타입 계약으로 표현합니다. 실제 값 검증은 __post_init__ 같은 코드가 담당합니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2dataclass와 타입 힌트 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
18강. dataclass와 타입 힌트 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.