Next-Squad/Interview-Question

[Java] 44. java 직렬화(Serialization)와 역직렬화(Deserialization)란 무엇인가

zbqmgldjfh opened this issue · 1 comments

java 직렬화(Serialization)와 역직렬화(Deserialization)란 무엇인가?

키워드

Java, 직렬화

직렬화? 역직렬화?

직렬화는 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술을 말하며,
반대로 바이트로 변환된 데이터를 다시 객체로 변환하는 기술은 역직렬화 라고 부릅니다.

image

왜 필요한가?

각자 PC의 OS마다 서로 다른 가상 메모리 주소 공간을 갖기 때문에, Heap에 생성된 Reference Type의 데이터들은 인스턴스를 전달 할 수 없습니다.

따라서, 이런 문제를 해결하기 위해선 주소값이 아닌 Byte 형태로 직렬화된 실질적인 객체 데이터를 전달해야만 합니다.
직렬화된 데이터들은 모두 Primitive Type(기본형)이 되고, 이는 파일 저장이나 네트워크 전송 시 파싱이 가능한 유의미한 데이터가 되죠!
따라서, 전송 및 저장이 가능한 데이터로 만들어주는 것이 바로 직렬화(Serialization)라고 말할 수 있습니다!

직렬화 조건

자바에서는 간단히 java.io.Serializable인터페이스 구현하면 직렬화/역직렬화가 가능해집니다.

직렬화 대상 : 인터페이스 상속 받은 객체, Reference 타입의 데이터
Primitive 타입이 아닌 Reference 타입처럼 주소값을 지닌 객체들은 바이트로 변환하기 위해 Serializable 인터페이스를 구현해야 합니다.