본문 바로가기
개발이야기

Serialize란 무엇인가?

by adrian7 2022. 12. 21.

Serialize 직렬화 단어를 설명하기 전에

JSON (JavaScript Object Notation) 문법은 많이 써보고 의미도 잘 알고 있다.

 

JSON 으로 변환하는 이유가 데이터 전달(스트림)의 목적이고 다수의 데이터를 묶어넣을 수 있어서 이다.

또한, API 외부 연동에도 많이 사용되고 다른 언어들과의 호환성도 무시 못하는 이유이다. (데이터 교환 형식 : XML, JSON)

 

JSON Serialize 예 (JSON.stringify 사용)

let person = {
    name : "Adrian",
    weight : 80,
    height : 180,
    gender : "M",
    birthday : "2006-10-1"
}

console.log(person);

let serializePerson = JSON.stringify(person);

console.log(serializePerson);

Console 결과

{
  name: 'Adrian',
  weight: 80,
  height: 180,
  gender: 'M',
  birthday: '2006-10-1'
}
{"name":"Adrian","weight":80,"height":180,"gender":"M","birthday":"2006-10-1"}

 

JSON Deserialize

let deserializePerson = JSON.parse(serializePerson);

console.log(deserializePerson);

Console 결과

{
  name: 'Adrian',
  weight: 80,
  height: 180,
  gender: 'M',
  birthday: '2006-10-1'
}

개발언어 (C++, C, C#, Java 등,,) 에서의 Serialize 는 다른 외부로의 호환성보다는 내부의 데이터 전달를 목적으로 사용하는 이유가 많다. 

 

조금 복잡한 Object 를 데이터로 저장하면 효율적인 개발을 할 수 있어서 다양한 활용측면에서 활용된다. 아래 이미지가 잘 표현되어 있다.

출처 : https://www.c-sharpcorner.com/UploadFile/fd0172/introduction-to-serialization-in-java/

 

 

#참조, 인용

데이터들의 메모리 구조는 크게 2가지로 나뉜다.

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

 

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

 

이 두가지 데이터 중에서 디스크에 저장하거나 통신에는 값 형식 데이터(Value Type)만 가능하다. 

참조 형식 데이터(Reference Type)는 실제 데이터 값이 아닌 힙에 할당되어있는 메모리 번지 주소를 가지고 있기 때문에 저장, 통신에 사용할 수 없다. (프로그램을 종료되면 기존에 할당되었던 메모리 값은 찾을 수 없다)

 

역직렬화시 주의사항 

역직렬화할 때는 직렬화할 때의 순서와 일치해야한다는 것이다. 또한 Object로 직렬화가 이루어지기 때문에 역직렬화시 Casting 작업이 필요하다.

'개발이야기' 카테고리의 다른 글

phind -- The AI search engine for thinkers  (0) 2023.01.03