객체 직렬화 및 역직렬화 개념 정리

김도비·2023년 1월 29일
0

Etc

목록 보기
4/4

개요

자바에서 직렬화란 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술이다.
바이트로 변환된 데이터를 다시 객체로 변환하는 기술을 "역직렬화"라고 한다.

시스템적으로 이야기하자면 JVM 메모리에 상주(힙/스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술과
직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태를 같이 이야기한다.

직렬화를 하는 이유

개발 언어로 무엇을 사용하던(C++, C, C#, Java...) 사용하는 데이터들의 메모리 구조는 크게 2가지로 나뉜다.

값 형식 데이터(Value Type)

메서드의 매개변수 또는 메서드내 지역변수로 사용하는 int, float, char 등, 값 형식 데이터들은 스택에 메모리가 쌓이고 직접 접근이 가능하다.

참조 형식 데이터(Reference Type)

자바에서 객체, C#에서 Object가 해당된다.
해당 형식의 변수를 선언하면 힙에 메모리가 할당되고 스택에서는 이 힙 메모리를 참조하는(힙에 메모리 번지 주소를 가지고 있음) 구조로 되어있다.
이 두가지 데이터 중에서 디스크에 저장하거나 통신에는 값 형식 데이터(Value Type)만 가능하다.

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

결과적으로 데이터를 통신이나 저장하기 위해서는 실제 데이터 값이 필요하기에 직렬화 과정이 필요하다.

profile
모든 걸 기록하자

0개의 댓글