직렬화 : 객체를 바이트 스트림으로 변환 .
역직렬화 : 직렬화된 데이터를 해석해서 객체 형태로 만듬.
현재 실행중인 서버의 메모리에 저장되어있는 { name: "직렬화" , id:12345 } 이 객체를 하드디스크에 저장하고 싶으면 어떻게 해야 할까? ( 직렬화 )
저장해둔 객체를 다시 서버가 꺼내와서 똑같은 객체로 변환시키고 싶으면 어떻게 해야 할까? ( 역 직렬화 )
위 객체를 " {name: '직렬화' , id : 12345 } " 이렇게 하나의 문자열로 변환시켜서 파일에 저장해두고
나중에 해당 파일을 읽어와서 문자열을 파싱해 객체로 변환하는 방법도 있을것이고
[객체 프로퍼티 플래그 (ex 222) , 아스키코드("n") , 아스키코드("a") , .... , 객체 값 플래그 , 객체 값 .... , 객체 프로퍼티 플래그 , ]
이런식의 바이트 스트림으로 변환해서 저장해두었다가 나중에 해당 바이트 스트림을 파싱해 사용 할 수도 있다.
어떤 방식으로든 현재 프로그램의 메모리속에 존재하는 객체를 밖으로 빼내고 싶을 때 직렬화를 사용한다.
언제 사용?
- 데이터를 영속화해서 서버에 종료되어도 따로 남겨두고 싶을때
- 외부에 데이터를 전송 할 때
언어별 다양한 직렬화 방식들
자바스크립트
JSON.stringify() : json 객체를 문자열로 변환 (직렬화)
JSON.parse() : 문자열을 json 객체로 변환 (역직렬화)
자바 스프링
ObjectOutputStream() : 객체를 바이트 스트림으로 변환 (직렬화)
ObjectInputStream() : 바이트 스트림을 객체 형태로 변환 (역직렬화)
Gson.toJson() : 객체를 JSON 문자열로 변환 (직렬화)
Gson.fromJson() : JSON 문자열을 객체로 변환 (역직렬화)