[Java] 44. java 직렬화(Serialization)와 역직렬화(Deserialization)란 무엇인가
zbqmgldjfh opened this issue · 1 comments
zbqmgldjfh commented
java 직렬화(Serialization)와 역직렬화(Deserialization)란 무엇인가?
키워드
Java
, 직렬화
zbqmgldjfh commented
직렬화? 역직렬화?
직렬화
는 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술을 말하며,
반대로 바이트로 변환된 데이터를 다시 객체로 변환하는 기술은 역직렬화
라고 부릅니다.
왜 필요한가?
각자 PC의 OS마다 서로 다른 가상 메모리 주소 공간을 갖기 때문에, Heap에 생성된 Reference Type의 데이터들은 인스턴스를 전달 할 수 없습니다.
따라서, 이런 문제를 해결하기 위해선 주소값이 아닌 Byte 형태로 직렬화된 실질적인 객체 데이터를 전달해야만 합니다.
직렬화된 데이터들은 모두 Primitive Type(기본형)이 되고, 이는 파일 저장이나 네트워크 전송 시 파싱이 가능한 유의미한 데이터가 되죠!
따라서, 전송 및 저장이 가능한 데이터로 만들어주는 것이 바로 직렬화(Serialization)
라고 말할 수 있습니다!
직렬화 조건
자바에서는 간단히 java.io.Serializable
인터페이스 구현하면 직렬화/역직렬화가 가능해집니다.
직렬화 대상 : 인터페이스 상속 받은 객체, Reference 타입의 데이터
Primitive 타입이 아닌 Reference 타입처럼 주소값을 지닌 객체들은 바이트로 변환하기 위해 Serializable 인터페이스를 구현해야 합니다.