[typescript] 정적 메서드와 인스턴스 메서드를 사용하여 데이터 직렬화 및 역직렬화하기

이번에는 TypeScript를 사용하여 데이터를 직렬화하고 역직렬화하는 방법에 대해 알아보겠습니다. 직렬화는 데이터를 저장하거나 전송하기 위해 문자열 또는 이진 형식으로 변환하는 과정을 말하며, 역직렬화는 직렬화된 데이터를 다시 객체나 데이터 구조로 변환하는 과정을 의미합니다.

직렬화 및 역직렬화 클래스 만들기

class Serialization {
    static serialize(data: any): string {
        return JSON.stringify(data);
    }

    static deserialize<T>(json: string): T {
        return JSON.parse(json);
    }
}

// 사용 예제
const serializedData = Serialization.serialize({ name: 'John', age: 30 });
console.log(serializedData); // 결과: {"name":"John","age":30}

const deserializedData = Serialization.deserialize<{ name: string, age: number }>(serializedData);
console.log(deserializedData); // 결과: { name: 'John', age: 30 }

위의 예제에서 Serialization 클래스는 정적 메서드 serializedeserialize를 제공합니다. serialize 메서드는 데이터를 JSON 문자열로 직렬화하고, deserialize 메서드는 JSON 문자열을 원래 데이터 구조로 역직렬화합니다.

직렬화 인터페이스 사용하기

때로는 특정 클래스의 인스턴스를 직렬화하는 것이 필요할 수 있습니다. 이 때 인스턴스 메서드를 사용하여 직렬화 및 역직렬화를 처리할 수 있습니다.

interface Serializable<T> {
    serialize(): string;
    deserialize(json: string): T;
}

class User implements Serializable<User> {
    constructor(public name: string, public age: number) {}

    serialize(): string {
        return JSON.stringify({ name: this.name, age: this.age });
    }

    deserialize(json: string): User {
        const data = JSON.parse(json);
        return new User(data.name, data.age);
    }
}

// 사용 예제
const user = new User('Jane', 25);
const serializedUser = user.serialize();
console.log(serializedUser); // 결과: {"name":"Jane","age":25}

const deserializedUser = new User('', 0).deserialize(serializedUser);
console.log(deserializedUser); // 결과: User { name: 'Jane', age: 25 }

위의 예제에서 User 클래스는 Serializable 인터페이스를 구현하여 serializedeserialize 메서드를 정의합니다. 이를 통해 User의 인스턴스를 직렬화하고 다시 역직렬화할 수 있습니다.

마무리

TypeScript를 사용하여 데이터 직렬화 및 역직렬화를 위해 정적 메서드와 인스턴스 메서드를 활용하는 방법에 대해 살펴보았습니다. 이러한 방법을 통해 데이터 처리 및 통신에서 유용하게 활용할 수 있습니다.