파이썬에서 리스트를 상속받아 데이터를 다루는 클래스에 데이터 직렬화(Serialization) 기능을 추가하면, 해당 데이터를 파일에 저장하거나 네트워크로 전송하는 것이 용이해집니다. 직렬화는 데이터 구조를 저장하거나 전송할 때 이를 문자열이나 바이트 스트림으로 변환하는 과정입니다. 파이썬에서는 일반적으로 json
, pickle
같은 라이브러리를 사용하여 직렬화 및 역직렬화(Deserialization)를 구현합니다.
이 예제에서는 리스트를 상속한 데이터 구조에 직렬화 기능을 추가해보겠습니다. 여기서는 json
을 이용하여 직렬화 및 역직렬화를 구현하는 예제를 살펴보겠습니다.
예제: 파이썬 리스트를 상속한 직렬화 가능한 자료구조
이 예제에서는 SerializableList
라는 클래스를 정의하고, 이를 통해 데이터를 리스트처럼 다루면서 직렬화 및 역직렬화 기능을 추가합니다.
예제 코드:
import json
# 리스트를 상속한 직렬화 가능 클래스 정의
class SerializableList(list):
# 리스트를 JSON 문자열로 직렬화하는 메서드
def to_json(self):
return json.dumps(self)
# JSON 문자열을 받아 리스트로 변환하는 클래스 메서드
@classmethod
def from_json(cls, json_str):
data = json.loads(json_str)
# JSON에서 파싱한 리스트 데이터를 SerializableList로 반환
return cls(data)
# 직렬화된 데이터를 파일로 저장하는 메서드
def save_to_file(self, filename):
with open(filename, 'w') as f:
json.dump(self, f)
# 파일에서 데이터를 읽어와 역직렬화하는 클래스 메서드
@classmethod
def load_from_file(cls, filename):
with open(filename, 'r') as f:
data = json.load(f)
return cls(data)
# 사용 예제
if __name__ == '__main__':
# SerializableList 객체 생성
my_list = SerializableList([1, 2, 3, 4, 5])
# 리스트를 JSON 문자열로 직렬화
json_str = my_list.to_json()
print("Serialized JSON String:", json_str)
# JSON 문자열을 다시 SerializableList로 역직렬화
new_list = SerializableList.from_json(json_str)
print("Deserialized List:", new_list)
# 데이터를 파일로 저장
my_list.save_to_file('my_list.json')
# 파일에서 데이터를 읽어와 역직렬화
loaded_list = SerializableList.load_from_file('my_list.json')
print("Loaded List from File:", loaded_list)
설명:
SerializableList
클래스:- 파이썬의 기본
list
클래스를 상속하여 리스트와 같은 기능을 유지하면서, 데이터를 직렬화할 수 있는 추가적인 기능을 제공합니다. to_json()
메서드는 리스트 객체를 JSON 문자열로 직렬화합니다.from_json()
클래스 메서드는 JSON 문자열을 받아서 이를 다시SerializableList
객체로 역직렬화합니다.save_to_file()
메서드는 리스트 데이터를 파일로 저장합니다.load_from_file()
클래스 메서드는 파일에서 데이터를 읽어와SerializableList
객체로 변환합니다.
- 파이썬의 기본
JSON 직렬화:
json.dumps()
를 사용하여 리스트 데이터를 JSON 문자열로 변환하고,json.loads()
를 사용하여 JSON 문자열을 다시 리스트로 변환합니다.json.dump()
와json.load()
는 파일에 데이터를 저장하거나 파일로부터 데이터를 읽을 때 사용합니다.
직렬화의 활용:
- 직렬화는 데이터를 쉽게 저장하거나 네트워크로 전송할 수 있게 해줍니다.
- 예를 들어, 리스트 데이터를 다른 프로그램이나 시스템에서 사용할 수 있도록 JSON 형태로 변환하여 전달할 수 있습니다.
실행 결과:
Serialized JSON String: [1, 2, 3, 4, 5]
Deserialized List: [1, 2, 3, 4, 5]
Loaded List from File: [1, 2, 3, 4, 5]
주요 포인트:
- 리스트 상속:
SerializableList
클래스는list
를 상속받았기 때문에 리스트의 모든 기능을 사용할 수 있습니다. 이와 함께 직렬화 관련 메서드가 추가되어 더 많은 기능을 지원합니다. - 데이터 직렬화: 직렬화를 통해 데이터를 파일이나 네트워크로 저장하거나 전송할 수 있습니다. JSON 직렬화는 사람이 읽을 수 있는 텍스트 형태로 변환되어 다양한 시스템 간에 데이터를 교환할 수 있는 표준입니다.
- 유연한 확장성: 리스트에 필요한 추가적인 기능(직렬화, 파일 저장/로드 등)을 쉽게 추가할 수 있으며, 리스트뿐만 아니라 다른 자료구조에도 직렬화 기능을 쉽게 확장할 수 있습니다.
이와 같은 구조는 데이터를 리스트처럼 다루면서, 이를 쉽게 저장하거나 불러와야 하는 웹 애플리케이션, API, 파일 기반 애플리케이션 등에 유용하게 사용할 수 있습니다.
'실용적인 자료구조' 카테고리의 다른 글
[실용적인 자료구조] 스택(Stack) 자료구조의 설명과 실무 적용 사례 (0) | 2024.10.26 |
---|---|
[실용적인 자료구조] 메타클래스 설명 및 예제코드 (2) | 2024.10.24 |
[실용적인 자료구조] Python의 'object' 클래스 2 (2) | 2024.10.20 |
[실용적인 자료구조] 게임 Way Point 저장을 위한 자료구조 (11) | 2024.10.19 |
[실용적인 자료구조] 리스트 상속 원형 큐(Circular Queue) 자료구조 (2) | 2024.10.18 |