Skip to content

Latest commit

 

History

History
25 lines (17 loc) · 2.27 KB

serialization.md

File metadata and controls

25 lines (17 loc) · 2.27 KB

직렬화란?

컴퓨터 과학의 데이터 스토리지 문맥에서 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장(파일이나 메모리 버퍼에서, 또는 네트워크 연결 링크간 전송)하고 나중에 재구성 할 수 있는 포맷으로 변환하는 과정이다.

메모리를 디스크에 저장하거나 네트워크 통신에 사용하기 위한 형식으로 변경하는 것

그래서 직렬화를 왜 쓰는건데 ?

우선 메모리(힙 영역, 스택 영역등)의 대한 기본적인 지식이 있어야 이해가 가능하다.
개발 언어로 무엇을 사용하던 사용하는 데이터들의 메모리 구조는 크게 2가지로 나뉜다.

  1. 값 형식 데이터(Value Type): 우리가 흔히 선언해서 사용하는 int, float, char등 값 형식 데이터들은 스택에 메모리가 쌓이고 직접 접근이 가능하다.

  2. 참조 형식 데이터(Reference type): C#에서 Object타입 혹은 C++에서 포인터 변수들이 여기에 해당된다.
    해당 형식의 변수를 선언하면 힙에 메모리가 할당되고 스택에서는 이 힙 메모리를 참조하는(힙에 메모리 번지 주소를 가지고 있음) 구조로 되어있다.

이 두가지 데이터 중에서 디스크에 저장하거나 통신에는 값 형식 데이터(Value Type)만 가능하다.
참조형식 데이터(Reference Type)는 실제 데이터 값이 아닌 힙에 할당되어있는 메모리 번지 주소를 가지고 있기 때문에 저장, 통신에 사용할 수 없다.

왜 참조형식 데이터는 사용할 수 없어 ?

  • 참조형식 데이터는 스택에 실제 데이터 값이 아닌 힙에 할당되어있는 메모리 번지 주소를 가지고 있다.
  • 네트워크 통신 관점으로 보면 참조 형식 데이터는 데이터를 전달하는게 아니라 주소를 전달하는 것 이므로 아무 의미 없다.
  • 참조 형식 데이터의 힙 데이터 영역에 저장되어 있는 값을 다른곳에 사용한다 해도 언어마다 힙 데이터 영역을 다루는 방법이 없다.

그래서 직렬화를 왜 쓰냐면..

사용하고있는 데이터들을 파일저장 혹은 데이터 통신에서 파싱할 수 있는 유의미한 데이터를 만들기 위함!