직렬화를 사용하는 이유
사용하고 있는 데이터들을 파일 저장 혹은 데이터 통신에서 파싱 할 수 있는 유의미한 데이터를 만들기 위함이다.
- 데이터 직렬화 serialization
메모리를 디스크에 저장하거나 네트워크 통신에 사용하기 위한 형식으로 변환 하는 것.
- 역직렬화
반대로 디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모이네 쓸 수 있도록 다시 변환하는 것.
데이터의 메모리 구조는 값 형식 데이터, 참조 형식 데이터 두 가지로 구분된다.
이 두가지 데이터 중에서는 디스크에 저장하거나 통신할 때는 값 형식 데이터만 가능하다.
- 값 형식 데이터 ( Value Type )
흔히 선언해서 사용하는 int, float, char 등 값 형식 데이터들은 스택에 메모리가 쌓이고 직접 접근이 가능하다.
- 참조 형식 데이터 ( Refernce Type )
C# 에서 Objectr 나 C++ 에서 포인터 변수들이 여기에 해당 된다.
해당 형식의 변수를 선언하면 힙에 메모리가 할당되고 스택에서는 이 힙 메모리는 참조하는 구조로 되어있다.
Java 직렬화
Java 직렬화는 자바 시스템 내부에서 사용되는
객체 또는 데이터들을 외부의 자바 시스템에서도 사용할 수 있도록
바이트(byte) 형태로 데이터 변환하는 기술과
바이트로 변환된 데이터를 다시 객체로 변환하는 역직렬화를 포함 한다.
시스템적으로 JVM의 Runtim Data Area(Heap 또는 스택영역)에 상주하고 있는
객체 데이터를 바이트 형태로 변환하는 기술과
직렬화된 바이트 형태의 데이터를 객체로 변환해서
JVM으로 상주시키는 형태를 말하기도 한다.
자바 직렬화를 사용할 때에는 될 수 있으면
자주 변경되는 클래스의 객체는 사용 안 하는 것이 좋다.
변경에 취약하기 때문에 생각지도 못한 예외사항들이 발생할 가능성이 높다.
특히 역직렬 화가 되지 않을 때와 같은 예외처리는
기본적으로 해두는 것을 추천한다.
물론 직렬화 대상 클래스 변경과 같은 문제는
자바 직렬 화만 일어나는 문제는 아니지만
자바 직렬화 기술은 중간에 끼어들 여지가 없는 블랙박스에 가까워서
변경 부분에 취약한 문제가 존재한다.
'TEAM STUDY > 한 권으로 읽는 컴퓨터 구조와 프로그래밍' 카테고리의 다른 글
CI/CD 란 ? 지속적인 통합 관리 배포 !! 😏😏 (0) | 2022.02.04 |
---|---|
런타임 라이브러리와 표준 입출력 (0) | 2022.01.07 |
표준 I/O (0) | 2022.01.07 |
context switch (문맥교환) 이란 ? (0) | 2022.01.03 |
저수준 언어와 고수준 언어 (0) | 2022.01.03 |