파이썬 dataclass와 ENUM 활용법: Pythonic 개발자 가이드

python - 파이써닉한 dataclass 와 ENUM

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

  • *Python 개발자, 데이터 모델링 및 타입 안정성 요구 시스템 설계자**
  • 난이도: 중급 이상 (dataclass 및 Enum 기본 사용법 이해 필수)*

핵심 요약

  • @dataclass(frozen=True): 불변 객체 생성, __hash__ 지원, dict/set 키로 사용 가능
  • default_factory: list/dict 등 mutable 기본값 사용 시 필수 (Python 3.9 이상 권장)
  • Enum: str/int 상속, __str__/__repr__ 커스터마이징, @unique로 값 유일성 강제

섹션별 세부 요약

  1. dataclass 기초
  • __init__, __repr__, __eq__ 자동 생성, order=True__lt__/__gt__ 등 비교 연산자 추가
  • asdict()/astuple()로 직렬화, 중첩 객체 재귀 변환 가능 (예: json.dumps() 활용)
  • slots=True로 메모리 최적화, __dict__ 동적 필드 추가 방지
  1. mutable/immutable 관리
  • @dataclass(frozen=True)로 불변 객체 생성, __post_init__에서 값 검증/보정 가능
  • default_factorylist/dict 기본값 공유 문제 해결 (Python 3.9 이상 필수)
  1. Enum 활용 팁
  • Enum vs typing.Literal: Enum은 런타임 객체, Literal은 타입 힌트 전용
  • str 상속으로 __str__ 직접 오버라이딩, IntEnum으로 정수 기반 비교 가능
  • @unique로 중복 값 방지, _missing_()로 커스텀 룩업 구현 가능
  1. 실무 패턴
  • dataclasspydantic 혼용: 검증 필요 시 pydantic.dataclass 사용 권장
  • Enum__str__/__repr__ 커스터마이징으로 가독성 향상, auto()로 비트 플래그 생성

결론

  • dataclass: frozen=True + default_factory 사용, order=True로 정렬 지원
  • Enum: str 상속 + __str__ 오버라이딩, @unique로 일관성 확보
  • 예제: @dataclass(frozen=True)DeliveryStatus 불변 객체 생성, Enum으로 Reliability 문자열 대체 가능