본문 바로가기
프로그래밍언어/파이썬[중급]

[파이썬][중급] Chapter46. 데이터 클래스와 필드 설정 (dataclasses)

by about_IT 2025. 5. 25.
728x90

파이썬 3.7부터 도입된 dataclasses는 클래스 정의를 간소화하고 자동으로 생성자, 비교 함수, 출력 함수 등을 만들어주는 데코레이터입니다. 이 장에서는 @dataclass의 다양한 기능과 필드 제어 방법을 살펴봅니다.


● 기본 사용법

from dataclasses import dataclass

@dataclass
class Person:
    name: str
    age: int

p = Person("Alice", 30)
print(p)  # Person(name='Alice', age=30)

생성자, __repr__, __eq__ 등 반복되는 메서드들이 자동으로 생성됩니다.


● 기본값과 필드 순서

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

기본값이 있는 필드는 반드시 기본값이 없는 필드 뒤에 위치해야 합니다.


● 필드 제어 (field 함수)

field()를 사용하면 디폴트값, 초기화 여부, 비교 여부 등을 상세 제어할 수 있습니다.

from dataclasses import field

@dataclass
class Item:
    name: str
    count: int = field(default=0, init=True, repr=True, compare=True)

● 초기화 제외 필드 (init=False)

@dataclass
class Log:
    message: str
    timestamp: float = field(init=False)

    def __post_init__(self):
        from time import time
        self.timestamp = time()

__post_init__()는 생성자 이후에 자동 실행되어 필드 초기화에 사용됩니다.


● frozen=True로 불변 클래스 만들기

@dataclass(frozen=True)
class Config:
    host: str
    port: int

frozen을 True로 설정하면 생성 이후 값을 변경할 수 없는 불변 객체가 됩니다.


● 마무리

dataclass는 간결하고 명확한 데이터 중심 클래스 정의를 가능하게 합니다. field(), __post_init__(), frozen 등의 기능을 통해 객체의 생성과 제약을 정교하게 설계할 수 있습니다.

728x90