객체 직렬화란 객체의 내용을 바이트 단위로 변환하여 파일 또는 네트워크를 통해서
송수신(스트림)이 가능하게 만들어 주는 것을 말합니다.
여기서 객체란 멤버변수의 메모리만으로 구성된 것을 말하구요.
따라서 객체 직렬화에서 메서드와 생성자는 제외된다는 것을 잊지 마세요!
이렇게 객체를 직렬화 함으로써 얻을 수 있는 장점은 객체 자체의 내용을 입출력 형식에 구애 받지 않고객체를 파일에 저장함으로써 영속성을 제공할 수 있고, 객체 자체를 네트워크를 통하여 손쉽게 교환할 수있게 됩니다.
객체 직렬화는 자바 1.1 이후에 도입이 되었는데 그 이유는 RMI와 Bean 때문이었습니다.
RMI는 원격객체통신을 지원해야 하기 때문에 객체가 그대로 이동할 수 있어야 합니다.
따라서 이를 지원하기 위해서 객체직렬화가 필수이구요.
그리고 Bean은 설계시 상태에 대한 정보를 지정할때 이 객체직렬화를 사용하면 편하게 객체 상태를 저장할 수 있습니다.
그 외에도 네트워크 프로그램이나 파일 프로그램에서 객체직렬화를 사용하면 코딩도 짧아지고 작업이 수월하게 됩니다.
Serializable 인터페이스와 ObjectInputStream 클래스,ObjectOutputStream클래스
객체 직렬화를 하기 위해서 먼저 객체를 객체직렬화가 가능하도록 Serializable 인터페이스를 구현해야 합니다.
그리고 ObjectInputStream 클래스와 ObjectOutputStream클래스는 객체를 입출력을 하기 위해 사용되는 클래스이다. 이들은 다 java.io 패키지에 정의되어 있는데요. 각각에 대해서 알아보자구요.
1> Serializable 인터페이스
객체 직렬화를 하기 위해서 먼저 객체를 객체직렬화가 가능하도록 Serializable 인터페이스를 구현해야 합니다.
이 인터페이스는 객체직렬화가 제공되어야 함을 자바가상머신에 알려주는 역활을 하구요.
Serializable 인터페이스는 다른 인터페이스와는 달리 구현해야 할 메서드가 없으므로 단지 선언만 해주시면 됩니다.
2> ObjectInputStream 클래스
ObjectInputStream 클래스는 파일에 저장되어 있는 객체 또는 네트워크를 통해 직렬화되어
전달된 객체를 직렬해제 하는 기능을 제공해 주고 있다.
한가지 주의할 점은, java.io.Serializable 인터페이스와 java.io.Externalizable 인터페이스를 지원해 주는 객체에 대해서만 가능하다는 것인데, 이는 등록된(즉 Serializable 인터페이스와 Externalizable 인터페이스를 구현한 클래스 객체) 객체를 말한다. 이 때, readObject 메소드를 이용하여 스트림으로부터 직렬화된 객체를 읽을 수 있습니다. 그리고, 이렇게 읽은 객체는 배열, 문자열, 또는 각 객체 등 원래의 형으로 캐스팅 해 주어야 합니다.
3> ObjectOutputStream 클래스
ObjectOutputStream 클래스는 객체들을 출력하는 기능을 제공해 주고,
출력 스트림에 출력하기 전에 직렬화를 수행한다.
ObjectOutputStream 클래스는 자바 기본형 데이터 또는 객체들을 파일에 저장하거나 네트워크를 통해 전달하기 위해 전달할 객체를 직렬화하는 기능을 제공해 준다. 이 클래스도 역시 ObjectInputStream 클래스와 마찬가지로 java.io.Serializable 인터페이스와 java.io.Externalizable 인터페이스를 구현한 객체에 대해서만 가능하구요. 이 때, writeObject 메소드를 이용하여 스트림에 직렬화된 객체를 출력할 수 있습니다.
'프로그래밍 정리 > 안드로이드' 카테고리의 다른 글
CustomDialog (0) | 2012.06.19 |
---|---|
ListView, BaseAdapter (0) | 2012.06.19 |
안드로이드에 탑재된 리눅스 커널 버전 확인하기 (0) | 2012.06.13 |
디바이스 모델명 (0) | 2012.06.13 |
안드로이드에 탑재된 리눅스 커널 버전 확인하기 (0) | 2012.06.13 |