파이썬에서 리스트를 상속받아 데이터를 다루는 클래스에 데이터 직렬화(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)

설명:

  1. SerializableList 클래스:

    • 파이썬의 기본 list 클래스를 상속하여 리스트와 같은 기능을 유지하면서, 데이터를 직렬화할 수 있는 추가적인 기능을 제공합니다.
    • to_json() 메서드는 리스트 객체를 JSON 문자열로 직렬화합니다.
    • from_json() 클래스 메서드는 JSON 문자열을 받아서 이를 다시 SerializableList 객체로 역직렬화합니다.
    • save_to_file() 메서드는 리스트 데이터를 파일로 저장합니다.
    • load_from_file() 클래스 메서드는 파일에서 데이터를 읽어와 SerializableList 객체로 변환합니다.
  2. JSON 직렬화:

    • json.dumps()를 사용하여 리스트 데이터를 JSON 문자열로 변환하고, json.loads()를 사용하여 JSON 문자열을 다시 리스트로 변환합니다.
    • json.dump()json.load()는 파일에 데이터를 저장하거나 파일로부터 데이터를 읽을 때 사용합니다.
  3. 직렬화의 활용:

    • 직렬화는 데이터를 쉽게 저장하거나 네트워크로 전송할 수 있게 해줍니다.
    • 예를 들어, 리스트 데이터를 다른 프로그램이나 시스템에서 사용할 수 있도록 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]

주요 포인트:

  1. 리스트 상속: SerializableList 클래스는 list를 상속받았기 때문에 리스트의 모든 기능을 사용할 수 있습니다. 이와 함께 직렬화 관련 메서드가 추가되어 더 많은 기능을 지원합니다.
  2. 데이터 직렬화: 직렬화를 통해 데이터를 파일이나 네트워크로 저장하거나 전송할 수 있습니다. JSON 직렬화는 사람이 읽을 수 있는 텍스트 형태로 변환되어 다양한 시스템 간에 데이터를 교환할 수 있는 표준입니다.
  3. 유연한 확장성: 리스트에 필요한 추가적인 기능(직렬화, 파일 저장/로드 등)을 쉽게 추가할 수 있으며, 리스트뿐만 아니라 다른 자료구조에도 직렬화 기능을 쉽게 확장할 수 있습니다.

이와 같은 구조는 데이터를 리스트처럼 다루면서, 이를 쉽게 저장하거나 불러와야 하는 웹 애플리케이션, API, 파일 기반 애플리케이션 등에 유용하게 사용할 수 있습니다.

+ Recent posts