개발언어 Back-End/Python

데이터 클래스(dataclasses ) 의 사용목적, 단점, 사용 예시

bluebamus 2024. 2. 1.

 1. 사용 목적 

   - 일단 이 영상을 추천한다.

 

   - 여러개의 포스트를 봤지만, 해당 영상이 가장 직관적이었다.

   - 사용 목적으로 database처럼 쓸 수 있고 init 대신 사용가능, 데이터를 디테일하게 관리할 수 있다 정도이다.

   

 2. 단점 (기능적, 설계적)

   - 여러 글이 있지만, 단점에 대한 정리가 부족해 gtp를 이용해 아래와 같이 정리한다.

 

   - 기능상 단점 : 

      1) Python 3.7 이상에서만 사용 가능: 데이터클래스는 Python 3.7 이상 버전에서만 사용할 수 있습니다. 이전 버전에서는 사용할 수 없으므로, 호환성을 고려해야 합니다.
      2) 불변성(Immutability) 설정 주의: dataclass(frozen=True) 옵션을 사용하여 클래스를 불변으로 만들 수 있습니다. 하지만 이렇게 설정하면 클래스의 속성을 나중에 변경할 수 없으므로, 불변성이 필요한 경우에만 사용해야 합니다.
      3) 기본값(Default Value) 설정 주의: 데이터클래스에서 기본값을 설정할 때는 주의가 필요합니다. 뮤터블한 객체(mutable object)를 기본값으로 설정하면, 의도치 않게 여러 인스턴스 간에 공유될 수 있습니다.
      4) 비교 연산자(Comparison Operators): 데이터클래스는 기본적으로 속성 값을 기반으로 비 연산자를 자동으로 생성합니다. 이는 때때로 원치 않는 결과를 초래할 수 있으므로, 필요에 따라 __eq__ 메소드 등을 직접 구현해야 할 수도 있습니다.
      5) 성능 이슈: 데이터클래스는 편의성을 제공하지만, 기존 일반 클래스에 비해 성능이 다소 떨어질 수 있습니다. 특히 런타임에 생성되는 메소드들은 일반 클래스에 비해 더 많은 오버헤드를 가질 수 있습니다.

 

   - 설계 관점에서의 단점

      1) 추상화 수준의 저하: 데이터클래스는 필드를 명시적으로 선언하고 간편하게 접근할 수 있는 방법을 제공합니다.는 코드의 가독성을 향상시키지만, 동시에 추상 수준을 저하시킬 수 있습니다. 특히, 데이터클래스의 사용이 과도해지면 객체 지향 설계 원칙이 무시되거나 소프트웨어의 복잡성이 증가할 수 있습니다.
      2) 데이터와 로직의 분리 문제: 데이터클래스는 데이터의 묶음을 다루는데 효과적입니다. 그러나 데이터와 로직이 분리되어야 하는 상황에서는 부적절할 수 있습니다. 데이터와 관련된 로직이 필요한 경우, 일반 클래스를 사용하는 것이 더 적합할 수 있습니다.
      3) 클래스 설의 유연성 저하: 데이터클래스는 기본적인 메소드를 자동으로 생성합니다. 이로 인해 클래스 설계의 유연성이 저하될 수 있습니다. 특별한 동작을 정의하려면 메소드를 오버라이드해야 하는데, 이는 코드의 복잡성을 증가시킬 수 있습니다.
      4) 불필요한 메소드 생성: 데이터클래스는 __init__, __repr__, __eq__ 등의 메소드를 자동으로 생성합니다. 이들 메소드가 모두 필요하지 않은 경우에도 생성되므로, 메모리를 불필요하게 소모할 수 있습니다.
      5) 캡슐화 위반: 데이터클래스는 필드에 직접 접근할 수 있도록 설계되어 있습니다. 이는 객체 지향 원칙 중 하나인 캡슐화를 위반할 수 있습니다. 필드에 직접 접근하게 하면, 클래스 내부 구현이 외부에 노출되어, 코드 유지 보수가 어려워질 수 있습니다.

 

 3. 사용 예시

   - 아래 예시를 보면 데이터베이스 데이터 결과를 인스턴스화 하거나 네트워크 혹은 파일에 대한 I/O에 의한 데이터 및 설정 등을 인스턴스화 하는데 사용할 수 있다.

   - 싱글톤에 사용하는 예시도 있었다. 

   - 시나리오 :

      1) 데이터베이스의 행을 표현하는 경우: 각각의 클래스 인스턴스가 데이터베이스의 한 행을 대표하고, 클래스의 필드가 해당 행의 열을 나타낼 때, 데이터클래스를 사용하면 간편하게 데이터를 다룰 수 있습니다.
      2) 컴퓨터 게임에서 캐릭터의 속성을 관리하는 경우: 캐릭터의 능력치, 체력, 마나 등의 속성을 관리하는 객체를 생성할 때, 데이터클래스를 이용하면 각 속성에 쉽게 접근하고, 이를 효율적으로 관리할 수 있습니다.
      3) 머신러닝에서 피쳐를 관리하는 경우: 각각의 피쳐를 클래스의 필드로 표현하고, 이들을 묶어 하나의 데이터 포인트를 표현할 때, 데이터클래스를 사용하면 효율적인 데이터 관리가 가능합니다.
      4) HTTP 요청 및 응답을 다루는 경우: HTTP 요청의 헤더, 바디, 메소드 등을 필드로 가진 클래스를 만들 때, 데이터클래스를 사용하면 각 요소를 명확하게 구분하고 쉽게 접근할 수 있습니다.
      5) 복잡한 설정 파일을 다루는 경우: 여러 개의 설정 값을 가진 설정 파일을 다루는 경우, 각 설정 값을 클래스의 필드로 표현하고, 이를 데이터클래스로 관리하면 설정 값에 쉽게 접근하고 수정할 수 있습니다.

      6) 주식 거래 정보 관리: 주식의 종목명, 현재 가격, 시가, 고가, 저가 등의 정보를 필드로 갖는 데이터클래스를 만들어 주식 거래 정보를 효율적으로 관리할 수 있습니다.
      7) 도서관 도서 관리: 도서의 제목, 저자, 출판일, ISBN 등의 정보를 필드로 갖는 데이터클래스를 만들어 도서 정보를 효율적으로 관리할 수 있습니다.
      8) 학생 성적 관리: 학생의 이름, 학번, 과목별 성적 등을 필드로 갖는 데이터클래스를 만들어 학생의 성적 정보를 효율적으로 관리할 수 있습니다.
      9) 온라인 쇼핑몰 상품 관리: 상품의 이름, 가격, 재고 수량, 상품 설명 등의 정보를 필드로 갖는 데이터클래스를 만들어 온라인 쇼핑몰의 상품 정보를 효율적으로 관리할 수 있습니다.
      10) 사원 정보 관리: 사원의 이름, 사번, 부서, 직급 등의 정보를 필드로 갖는 데이터클래스를 만들어 사원 정보를 효율적으로 관리할 수 있습니다.
      11) 은행 계좌 관리: 계좌의 소유자, 계좌 번호, 잔액, 개설일 등의 정보를 필드로 갖는 데이터클래스를 만들어 은행 계좌 정보를 효율적으로 관리할 수 있습니다.
      12) 영화 정보 관리: 영화의 제목, 감독, 출연 배우, 개봉일, 장르 등의 정보를 필드로 갖는 데이터클래스를 만들어 영화 정보를 효율적으로 관리할 수 있습니다.
      13) 자동차 정보 관리: 자동차의 제조사, 모델명, 연식, 엔진 유형 등의 정보를 필드로 갖는 데이터클래스를 만들어 자동차 정보를 효율적으로 관리할 수 있습니다.
      14) 환자 정보 관리: 환자의 이름, 주민등록번호, 진료 기록, 약물 정보 등의 정보를 필드로 갖는 데이터클래스를 만들어 환자 정보를 효율적으로 관리할 수 있습니다.
      15) 공항 항공편 정보 관리: 항공편의 항공사, 편명, 출발지, 도착지, 출발 시간, 도착 시간 등의 정보를 필드로 갖는 데이터클래스를 만들어 항공편 정보를 효율적으로 관리할 수 있습니다.

 

 - reference : 

https://denev6.tistory.com/entry/dataclasses

 

객체 데이터 다루기 (dataclasses, property)

nomad-coders님의 영상을 보다가 dataclasses라는 유용한 라이브러리를 알게 되어 정리하게 되었다. 정리한 내용은 공식 문서 (3.11)를 참고하여 작성하였다. 추가로 객체 데이터를 다룰 때 유용하게 사

denev6.tistory.com

https://scshim.tistory.com/638

 

[Python] 데이터클래스 Dataclass

데이터 값을 보유하도록 설계된 클래스 파이썬 3.7에 도입된 파이썬 내장 라이브러리 사용예시: dataclass는 다음과 같이 정의한다. 필드를 정의할 때 타입 힌트를 필수적으로 추가한다. from dataclass

scshim.tistory.com

https://velog.io/@sawol/%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%81%B4%EB%9E%98%EC%8A%A4dataclasses

 

데이터 클래스(dataclasses)

데이터 클래스 데이터 클래스 정의 파이썬 3.7 버전에 추가된 기능 데코레이터 특정한 매직 메서드를 자동으로 만들어 줌 변수 어노테이션이 붙어 있는 어트리뷰트(클래스 내의 변수나 메서드)

velog.io

https://www.daleseo.com/python-dataclasses/

 

[파이썬] 데이터 클래스 사용법 (dataclasses 모듈)

Engineering Blog by Dale Seo

www.daleseo.com

 

댓글