직렬화(Serialization)와 역직렬화(Deserialization)
직렬화(直列化) 또는 시리얼라이제이션(serialization)은 컴퓨터 과학의 데이터 스토리지 문맥에서 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장(이를테면 파일이나 메모리 버퍼에서, 또는 네트워크 연결 링크 간 전송)하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정이다. 오브젝트를 직렬화하는 과정은 오브젝트를 마샬링한다고도 한다. 반대로, 일련의 바이트로부터 데이터 구조를 추출하는 일은 역직렬화 또는 디시리얼라이제이션(deserialization)이라고 한다. 출처 - https://ko.wikipedia.org/wiki/%EC%A7%81%EB%A0%AC%ED%99%94 |
- 직렬화: 객체를 바이트 스트림으로 변환하여 파일 시스템이나 네트워크를 통해 전송할 수 있게 만드는 과정이다. 예를 들어, 객체를 JSON, XML 또는 이진 형식으로 변환할 수 있다.
- 역직렬화: 직렬화된 데이터를 다시 원래의 객체 형태로 변환하는 과정이다. 이 과정에서는 저장된 데이터를 읽어들여 객체를 복원한다.
사용 이유는 아래와 같다.
- 데이터 저장: 객체를 파일이나 데이터베이스에 저장하여 프로그램 종료 후에도 데이터를 유지할 수 있다.
- 네트워크 전송: 객체를 네트워크를 통해 전송할 때, 직렬화를 통해 데이터 크기를 줄이고, 전송할 수 있다.
- 호환성: 서로 다른 시스템 간에 데이터 교환을 쉽게 할 수 있다.
그런데 왜 서로 다른 IT 분야에서 사용하는 직렬화 형식이 다를까?
- 특정 형식은 특정 용도에 최적화되어 있다. 예를 들어, XML은 구조화된 데이터와 메타데이터를 표현하는 데 유리하고, JSON은 웹 API에서 주로 사용된다.
- 특정 형식은 성능이나 데이터 크기 측면에서 더 효율적이다. 예를 들어, 이진 형식은 데이터 크기가 작고 직렬화/역직렬화 속도가 빠르지만, JSON이나 XML은 사람이 읽기 쉬운 형식이다.
그래서 이진 형식을 주로 실시간 멀티 게임 분야에서 사용하고, Json, XML등은 웹 개발에 사용된다.
[C# 직렬화 예시]
using System;
using System.Text.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
Person person = new Person { Name = "Alice", Age = 30 };
string jsonString = JsonSerializer.Serialize(person);
Console.WriteLine(jsonString);
}
}
[C# 역직렬화 예시]
using System;
using System.Text.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
string jsonString = "{\"Name\":\"Alice\",\"Age\":30}";
Person person = JsonSerializer.Deserialize<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
C#에서는 System.Text.Json namespace를 제공해 주어 이를 이용해 json 형식으로 직렬화, 역직렬화를 진행했다!
'TIL' 카테고리의 다른 글
[TIL] Git .gitignore 에 제외 폴더 경로 추가하기 (0) | 2024.10.11 |
---|---|
[TIL] C# 이벤트(Event)란? (0) | 2024.10.07 |
[TIL] 매직넘버(Magic Number) 문제란 무엇인가? (1) | 2024.10.02 |
[TIL] C#은 주소(메모리) 접근을 어떻게 할까? (0) | 2024.09.30 |
[TIL] C# SOLID - 단일 책임의 원칙이란? (0) | 2024.09.27 |