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
로 값 유일성 강제
섹션별 세부 요약
- dataclass 기초
__init__
,__repr__
,__eq__
자동 생성,order=True
로__lt__
/__gt__
등 비교 연산자 추가asdict()
/astuple()
로 직렬화, 중첩 객체 재귀 변환 가능 (예:json.dumps()
활용)slots=True
로 메모리 최적화,__dict__
동적 필드 추가 방지
- mutable/immutable 관리
@dataclass(frozen=True)
로 불변 객체 생성,__post_init__
에서 값 검증/보정 가능default_factory
로list
/dict
기본값 공유 문제 해결 (Python 3.9 이상 필수)
- Enum 활용 팁
Enum
vstyping.Literal
:Enum
은 런타임 객체,Literal
은 타입 힌트 전용str
상속으로__str__
직접 오버라이딩,IntEnum
으로 정수 기반 비교 가능@unique
로 중복 값 방지,_missing_()
로 커스텀 룩업 구현 가능
- 실무 패턴
dataclass
와pydantic
혼용: 검증 필요 시pydantic.dataclass
사용 권장Enum
의__str__
/__repr__
커스터마이징으로 가독성 향상,auto()
로 비트 플래그 생성
결론
dataclass
:frozen=True
+default_factory
사용,order=True
로 정렬 지원Enum
:str
상속 +__str__
오버라이딩,@unique
로 일관성 확보- 예제:
@dataclass(frozen=True)
로DeliveryStatus
불변 객체 생성,Enum
으로Reliability
문자열 대체 가능