본문 바로가기
CS 기초/Network

직렬화(Serialize)와 역직렬화(Deserialize)란?

by woohyeon 2020. 2. 29.
반응형

직렬화(Serialize)


프로그램의 object에 담긴 데이터를 어떤 외부 파일에 write 및 전송하는 것
 


역직렬화(Deserialize)


어떤 외부 파일의 데이터를 프로그램 내의 object로 read 해오는 것

 

 

https://medium.com/@dilankam/java-serialization-4ff2d5cf5fa8

 

+ 보충 설명

네트워크 통신에서 객체 또는 클래스 직렬화의 의미는 다음과 같다.

상대 호스트와 데이터를 주고 받을 때 데이터의 종류는 int, double 과 같은 기본 타입일 수도 있지만, 포인터 타입을 가질 수도 있다. 또한 바이트가 연속적이지 않은 NON-POD 타입일 수 있다.(i.e. 가상 함수 또는 vector를 멤버로 가지는 클래스 타입 등) 기본 타입은 그 값 그대로 유효하지만 포인터 타입은 그렇지 않다. 포인터 타입은 어떤 유효한 값에 대한 주소를 가지는데, 이는 자신의 컴퓨터의 메모리 주소에 해당하기 때문에 상대방의 동일한 주소에도 동일한 값이 들어 있다고 확신할 수 없다. 따라서 포인터를 그대로 넘기면 이상한 값을 가리키게 될 수 있다. 클래스 타입도 마찬가지다.

이러한 이유로 데이터를 그대로 전송하지 않고, 전송할 데이터들을 하나의 버퍼에 연속된 비트 단위로 길게 나열하여 연속으로 저장하는 방식을 객체 직렬화라고 한다. 직렬화된 버퍼를 수신하면 다시 객체의 각 멤버 타입에 맞게 분리(역직렬화)하여 데이터를 복구한다.




댓글