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 를 데이터로 저장하면 효율적인 개발을 할 수 있어서 다양한 활용측면에서 활용된다. 아래 이미지가 잘 표현되어 있다.
#참조, 인용
데이터들의 메모리 구조는 크게 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 |
---|