배움 기록/Programming

[python, dataclass] 데이터 클래스의 장점

Spezi 2024. 2. 26. 05:50
반응형

우리는 여러가지 방법을 이용해 데이터를 담을 수 있다.

그냥 list, dict을 통해 데이터를 저장하는 것과 비교해, 데이터 클래스를 통해 데이터를 담아두면 어떤 장점이 있을까?

 

1. 일단, 타입힌트 지원이 된다

from dataclasses import dataclass

@dataclass
class UserProfile:
    username: str
    age: int
    is_active: bool

def create_user_profile(username: str, age: int, is_active: bool) -> UserProfile:
    return UserProfile(username, age, is_active)

데이터 클래스는 변수와 함께 타입 어노테이션을 제공하는 것을 허용하는데, 이는 코드를 이해하고 유지보수하기 쉽게 만들며, 타입 검사기를 통해 코드의 안정성을 높일 수 있다.

 

2. 그리고 데이터의 일관성을 보장할 수 있다.

from dataclasses import dataclass

@dataclass
class User:
    username: str
    age: int
    is_active: bool

user1 = User(username="johndoe", age=25, is_active=True)
user2 = User(username="janedoe", age=30, is_active=False)

# 이후 사용자 정보가 변경되었다고 가정해보자.
user1.age = "thirty"  # 이렇게 잘못된 타입의 데이터를 할당하려고 하면 타입 에러가 발생한다.

 

여기서 데이터 클래스를 사용하면 User 클래스의 속성을 특정한 유형으로 강제할 수 있다. 이는 사용자의 age가 정수형(int)이어야 한다는 것을 보장한다. 만약 일반적인 딕셔너리를 사용했다면, 이러한 유형의 검사를 직접 구현해야 했을 것이다.

 

이처럼 데이터 클래스를 사용하면 일반적으로 데이터의 일관성을 보다 쉽게 유지할 수 있고, 클래스의 속성을 특정한 유형으로 강제함으로써 데이터의 부적절한 사용을 방지할 수 있다!

 

3. 또 디폴트 값을 설정할 수 있다는 장점도 있다.

from dataclasses import dataclass

@dataclass
class User:
    username: str
    age: int
    is_active: bool = True  # 디폴트 값으로 True를 설정함

user1 = User(username="johndoe", age=25)
user2 = User(username="janedoe", age=30, is_active=False)  # 활성화 여부를 명시적으로 변경할 수도 있음

 

여기서는 User 클래스의 is_active 속성에 디폴트 값으로 True를 설정했다. 이렇게 하면 사용자 정보를 생성할 때 is_active 를 명시하지 않아도 기본적으로 is_active 가 true 로 되어 있음을 의미한다.

 

이러한 설정은 데이터 클래스를 사용함으로써 코드를 더 간결하게 만들어준다. 만약 일반적인 클래스를 사용한다면 초기화 메서드에서 디폴트 값을 설정해야 하며, 이는 코드를 더 복잡하게 만들고 일관성을 유지하기 어렵게 할 수 있다.

# 일반적인 class를 사용하여 default 값을 설정하는 법

class User:
    def __init__(self, username, age, is_active=True):
        self.username = username
        self.age = age
        self.is_active = is_active

user1 = User(username="johndoe", age=25)
user2 = User(username="janedoe", age=30, is_active=False)

 

 

 

 

 


배움을 기록하기 위한 공간입니다. 

수정이 필요한 내용이나 공유하고 싶은 것이 있다면 언제든 댓글로 남겨주시면 환영입니다 :D

반응형