직렬화 란?
- 시리얼라이제이션(serialization)은 컴퓨터 과학의 데이터 스토리지 문맥에서 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장, 파일이나 메모리 버퍼에서, 또는 네트워크 연결 링크 간 전송하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정이다.
- 오브젝트를 직렬화하는 과정은 오브젝트를 마샬링한다고도 한다.
- 반대로, 일련의 바이트로부터 데이터 구조를 추출하는 일은 역직렬화 또는 디시리얼라이제이션(deserialization)이라고 한다.
직렬화 특징
- 직렬화는 개체를 저장하거나, 메모리, 데이터베이스 또는 파일로 전송하기 위해 개체를 바이트 스트림으로 변환하는 프로세스다.
- 역직렬화는 반대로 바이트 스트림으로 변환한 데이터를 다시 객체로 재구성하는 과정이다.
- 개체는 스트림(Stream)으로 직렬화되어, 데이터뿐 아니라 버전, 문화권 및 어셈블리 이름과 같은 개체 형식에 대한 데이터를 운반할 수 있다.
직렬화 종류
- 이진(Binary) 직렬화 : 이진 형식에서 클래스형식으로 또는 그 반대로 변환한다.
FileStream stream = new FileStream("data.bin", FileMode.Create);
- XML 직렬화 : XML 형식에서 클래스 형식으로 또는 그 반대로 변환한다.
StreamWriter wirter = new StreamWriter("data.xml");
- Json 직렬화 : Json 형식에서 클래스 형식으로 또는 그 반대로 변환한다. (가장 많이 사용된다.)
string json = System.Text.Json.JsonSerializer.Serialize(변수명);
직렬화 단점
- 직렬화는 잠재적으로 비공개 구현 세부 정보를 노출하여 추상 데이터 형식의 불투명성을 깨뜨린다.
- 모든 데이터 멤버를 직렬화하는 사소한 구현은 캡슐화를 위반할 수 있다.
- 아카이브 및 도서관과 같은 많은 기관에서는 백업 아카이브, 특히 데이터베이스 덤프를 비교적 사람이 읽을 수 있는 직렬 형식으로 저장한다.