본문 바로가기
컴퓨터과학

직렬화란?(serialization),역직렬화란?? java.io.Serializable

by 디찌s 2024. 4. 25.
728x90
반응형

 

 

 

 

 

직렬화란 무엇인가??

 

데이터 직렬화(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
반응형

댓글