CHAPTER 15. (5) 직렬화란?
직렬화Serialization
- 객체를 데이터 스트림으로 만드는 것
=> 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것
(객체의 모든 인스턴스 변수를)
☆ 객체 저장
=> 객체의 모든 인스턴스 변수를 저장하는 것 (클래스변수, 메서드 포함X)
ㄴ왜 메서드는 포함하지 않는가?
= 인스턴스 변수는 인스턴스마다 다른 값을 가질 수 있기 때문에 별도의 메모리 공간 필요, but 메서드는 변하는 것이 아니라서 메모리 낭비 필요 X
ObjectInputStream / ObjectOutputStream
- 직렬화(스트림에 객체를 출력)에는 ObjectOutputStream 사용
ㄴ OutputStream 직접 상속받지만, oos는 기반 스트림을 필요로 하는 보조 스트림
=> 객체 생성 시 입출력할 스트림 지정해야 함
=> ObjectOutputStream(OutputStream out)
ex.
FileOutputStream fos = new FileOutputStream("objectfile.ser");
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(new UserInfo());
=> objectfile.ser이라는 파일에 UserInfo 객체를 직렬화하여 저장
☆ 역직렬화 역시 동일, 단, 반환타입이 Object이기 때문에 객체 원래 타입으로 형변환 필요
ex.
FileInputStream fis = new FileInputStream("objectfile.ser");
ObjectInputStream in = new ObjectInputStream(fis);
UserInfo info = (UserInfo)in.readObject();
단점
- 객체 직렬화 작업은 상당히 복잡, 시간 오래 걸림
방법
- 직렬화하고자 하는 클래스가 java.io.Serializable 인터페이스 구현
Serializable 인터페이스
- 아무 내용도 없는 빈 인터페이스
- 직렬화를 고려하여 작성한 클래스인지 판단하는 기준