우리는 여러가지 방법을 이용해 데이터를 담을 수 있다.
그냥 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
'배움 기록 > Programming' 카테고리의 다른 글
[Github actions] CI 구축하기 (feat. workflow yaml파일) (2) | 2024.03.01 |
---|---|
[python] (unittest.main) is not callable 에러 해결 (feat. PYTHONPATH, 환경변수) (0) | 2024.02.27 |
csv파일을 엑셀에서 세미콜론으로 분리해서 보기 (데이터 변형 없이!) (1) | 2024.01.11 |
GitHub Copilot이란? 학생 무료 계정 사용법 !! (0) | 2023.09.27 |
torch. squeeze의 역할 (0) | 2023.06.14 |