데이터 직렬화(Serialization)
정의
메모리를 디스크에 저장하거나 네트워크 통신에 사용하기 위한 형식으로 변환하는 것을 '데이터 직렬화'라고 합니다.
사용 이유
데이터의 메모리 구조는 크게 2가지로 나뉩니다.
1) 값 형식(Value Type) 데이터 : int, float, char 등의 값 형식 데이터들은 스택에 메모리가 쌓이고 직접 접근이 가능합니다.
2) 참조 형식(Reference Type) 데이터 : 포인터 변수나 객체 타입의 변수들이 여기에 해당됩니다. 해당 형식의 변수를 선언하면 힙에 메모리가 할당되고, 스택에서는 이 힙 메모리를 참조하는 구조로 되어있습니다.
디스크에 저장하거나 통신을 할 때에는 위 두가지 중 값 형식(Value Type) 데이터만 가능합니다. 참조 형식(Reference Type) 데이터는 실제 데이터 값이 아닌 힙에 할당되어 있는 메모리 번지 주소를 가지고 있기 때문에 저장이나 통신 등에 사용할 수 없습니다. 그런데 직렬화를 하게 되면, 각 주소값이 가지는 데이터들을 모아서 값 형식 데이터(Value Type)로 변환해줍니다. 직렬화가 된 데이터들은 텍스트 또는 바이너리 등의 형태가 되어 저장이나 통신 시 파싱이 가능한 유의미한 데이터가 됩니다.
따라서 사용하고 있는 데이터들을 파일 저장이나 데이터 통신에서 파싱 가능한 유의미한 데이터로 만들기 위해서 직렬화를 사용합니다.
자바 직렬화 조건
자바 기본 타입과 java.io.Serializable 인터페이스를 상속받은 객체는 직렬화 할 수 있는 기본 조건을 가지게 됩니다.
import java.io.Serializable;
public class Member implements Serializable {
// .....
}
데이터 역직렬화(Deserialization)
정의
디스크에 저장한 데이터를 읽거나 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 다시 변환하는 것을 '데이터 역직렬화'라고 합니다.
출처 : https://hub1234.tistory.com/26
'Java' 카테고리의 다른 글
[Java] 객체 정렬 Comparable vs Comparator (0) | 2022.02.20 |
---|---|
[Java] 싱글턴(Singleton) 디자인 패턴 (0) | 2022.02.20 |
[Java] 생성자와 초기화 (0) | 2022.02.18 |
[Java] 객체 지향 설계 5원칙_SOLID (0) | 2021.02.17 |
[Java] 자바가 확장한 객체 지향 (0) | 2021.02.17 |