[파이썬] dataclass

Kanto(칸토)·2024년 10월 9일
0

프로그래밍

목록 보기
4/5

도입 배경

파이썬 dataclass 모듈은 3.7에서 도입되었다. (https://peps.python.org/pep-0557/)
dataclass는 표준 라이브러리이다.

사용 경험

데이터클래스를 처음 쓰게 된 이유는 __init__ 함수를 작성하고 싶지 않아서였다. 그리고 초기화 변수 값들에 None 을 배정하고 싶었다.

데이터클래스에서는 이렇게 작성이 가능하다. 데코레이터 형식으로 사용하면 아래처럼 __init__ 없이도 변수 초기화를 할 수 있고, 초기화 변수에 아무 값을 넣지 않는 것도 가능하다.
name:str 처럼 말이다. 변수가 없어도 type hint를 콜론을 이용해 사용하는 것이 자연스럽다.


from dataclasses import dataclass

@dataclass
class InventoryItem:
    '''Class for keeping track of an item in inventory.'''
    name: str
    unit_price: float
    quantity_on_hand: int = 0

    def total_cost(self) -> float:
        return self.unit_price * self.quantity_on_hand
# https://docs.python.org/3.7/library/dataclasses.html

쉬운 설명

dataclass의 유용성을 이런 정도로만 사용을 하다보니 다른 사람에게 왜 이걸 써야 하는지 설명하기 어려웠다. 실용적인 이유에서 말이다.

dataclass 모듈은 bolier plate라고 볼 수 있다. 미리 만들어진 템플릿이라는 거다. 어떤 템플릿이 있나?

  • 위에서 이야기한 __init__() 템플릿 외에도 프린트 문을 통제하는 __repr__() ,__eq__() 등이 있다.

그런데 이름은 왜 dataclass인걸까. Java에는 VO라는 개념이 있다. Value Object라고 하여 값들을 들고다니기 위한 용도의 클래스라고 보면 될 것 같다.그런데 파이썬에서는 데이터만 들고다니는 클래스를 자주 쓰지 않는다. dictionary도 있고, list도 있다. 좀 더 정교한 프로그램으로 가면 namedtuple 도 있다. 개인적인 생각으로 dataclass는 이런 용도에서 데이터 들을 객체로 담고 다닐 수 있는 쉬운 방법중에 하나로 생각해도 될 것 같다. 그렇지 않고선 dataclass라는 이름이 붙은 이유가 자연스럽지 않을 것이다. 데이터를 들고 다닐 수 있으며, 이에 더해서 type check를 지원한다는 점. 이 정도면 충분하지 않을까.

공식 release 문서

공식 release 문서에는 이런 내용도 써있다.

Data Classes can be thought of as "mutable namedtuples with defaults"

, 이것은 default값이 있는 namedtuple이라는 거다. namedtuple 대해서는 또 설명이 필요하므로 우선 넘어가야할 것 같다.

참고
https://www.daleseo.com/python-dataclasses/
https://www.youtube.com/watch?v=vRVVyl9uaZc
https://velog.io/@livenow/Java-VOValue-Object%EB%9E%80
ChatGPT-4o

profile
통계학으로 사람들의 행동을 이해하고 싶습니다.

0개의 댓글