-
직렬화란?(serialization),역직렬화란?? java.io.Serializable컴퓨터과학 2024. 4. 25. 18:24728x90반응형
직렬화란 무엇인가??
데이터 직렬화(serialization)이란 메모리 데이터를 디스크에 저장하거나, 네트워크 통신에 사용하기 위해 해당 데이터 형식으로 변환하는 것을 말한다.
역직렬화(deserialization)이란 그 반대 개념으로, 디스크나 네트워크에서 받은 데이터를 메모리에 쓸 수 있도록 변환하는 것이다.
데이터 직렬화는 데이터의 전송/저장 혹은 설정 파일 등에 사용된다.
값을 직렬화 하자
int t = 0; //기본형 변수 Integer g = 5; //참조형 변수
자바에선 위와같이 , 기형 , 참조형으로 데이터를 저장한다. 값형은 메모리상에 직접적으로 데이터가 들어가있는 경우고 참조형 같은경우에는 값을 가리키고 있는 메모리 주소값을 저장한다.
만약 위에 데이터를 그대로 네트워크를 통해 다른 프로그램에 전송한다고 생각해보자.
int t 같은경우네는 직접적인 stack영역에 데이터가 할당되어있어 그값을 전달하는데에는 문제가없지만 , Integer g 는 stack값를 참조하는 heap영역에 주소값이기에 해당 기기에 OS에 따라 값이 다르다 .
예를들어 Integer g 에 값이 주소 x000이라면 해당 주소값을 전달한다는 이야기는 네트워크상에 연결된 다른pc에서도 해당 주소값 x000에 값을 가져와야하는 상황이라는것이다.
짐작하겠지만 당연히 값이 다르다. A PC 주소값 X000 값과 B PC X000 주소 값에 실제 값은 다르기 때문이다.
따라서 직렬화는 참조 값들을 응용 프로그램에서 쓰는 데이터 및 네트워크를 통해 전송하거나 DB 또는 파일에 저장 가능한 형식으로 바꾸는 프로세스이다.
데이터 직렬화 형식 4가지
- JSON
- XML
- YAML
- TOML
자바에서 직렬화 방식은 java.io.Serializable
자 그렇다면 이제 자바 인터페이스 Serializable를 사용하는 이유를 알게된다.
객체 = 참조 이기때문이다!
그러므로 참조형식들에 값들을 만들기위해 Serializable통해 직렬화를 시켜준뒤 데이터를 전송해주는것이고
역직렬화는 외부 소스에서 데이터를 읽고 이를 런타임 객체로 바꾸는 반대 프로세스이다.
728x90반응형'컴퓨터과학' 카테고리의 다른 글
cpu바운드 프로그램 멀티쓰레딩에 최적의 스레드 개수 결정 방법 및 멀티쓰레딩 개발에 주의할점 (0) 2024.05.22 프로세스 컨텍스트 스위칭과 스레드 컨텍스트 스위칭 정의 및 차이 with 예제 python (0) 2024.05.22 단일프로세스,멀티프로그래밍,멀티태스킹,멀티프로세싱,컨텍스트 스위칭,스레드,멀티쓰레드란 무엇인가? (0) 2024.05.17 동기(sync)/비동기(async) , 블로킹(blocking)/논블로킹(nonblocking) 쉽게 이해하고 완전 정복 하자 with 예제코드 with java (0) 2024.05.08 DMA(Direct Memory Access)란 왜사용할까? - 수정중 (0) 2024.05.08