직렬화(serialization)란 객체를 데이터 스트림으로 만드는 것을 뜻합니다.
덧붙여 말하면 객체에 저장된 데이터를 스트림에 write하기 위해 연속적인(serial) 데이터로 변환하는 것을 말합니다.
반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역질렬화(deserialization)라고 합니다.
직렬화라는 용어 때문에 괜히 어렵게 느껴질 수 있는데 사실 객체를 저장하거나 전송하려면 당연히 이렇게 할 수 밖에 없습니다.
이미 앞서 객체에 대해서 설명했지만, 여기서 객체란 무엇이며, 객체를 저장한다는 것을 무엇을 의미하는가에 대해서 알아보겠습니다.
객체는 클래서에 정의된 인스턴스변수의 집합입니다. 객체에는 클래스변수나 메서드가 포함되지 않습니다. 객체는 오직 인스턴스변수들로만 구성되어 있습니다.
그래서 객체를 저장한다는 것은 바로 객체의 모든 인스턴스변수의 값을 저장한다는 것과 같은 의미입니다.
어떤 객체를 저장하고자 한다면, 현재 객체의 모든 인스턴스변수의 값을 저장하기만 하면 됩니다.
그리고 저장했던 객체를 다시 생성하려면, 객체를 생성한 후에 저장했던 값을 읽어서 생성한 객체의 인스턴스변수에 저장하면 됩니다.
클래스에 정의된 인스턴스변수가 단순히 기본형일 때믄 인스턴스변수의 값을 저장하는 일이 간단하지만, 인스턴스변수의 타입이 참조형 일 때는 그리 간단하지 않습니다. 예를들어 인스턴스변수의 타입이 배열이라면 배열에 저장된 값들도 모두 저장되어야 할 것입니다.
그러나 우리는 객체를 어떻게 직렬화해야 하는지 전혀 고민하지 않아도 됩니다. 다만 객체를 직렬화/역질렬화할 수 있는 ObjectInputStream과 ObjectOutputStream을 사용하는 방법만 알면 됩니다.
자바에서의 네트워크 프로그래밍(InetAddress) (0) | 2019.07.28 |
---|---|
직렬화 두번째 시간 (0) | 2019.07.28 |
File (0) | 2019.07.22 |
표준입출력 (0) | 2019.07.20 |
BufferedReader,BufferedWriter,InputStreamReader,OutputStreamWriter (0) | 2019.07.03 |
댓글 영역