한 번에 끝내는 Java/Spring 웹 개발 마스터
인스턴스의 상태를 그대로 파일 저장하거나 네트웍으로 전송하고 (serialization) 이를 다시 복원(deserializatio) 하는 방식을 말한다.
보조 스트림을 활용하여 직렬화를 제공한다.
ObjectInputStream과 ObjectOutputStream
직렬화는 인스턴스의 내용이 외부로 유출되는 것이므로, 해당 객체에 대한 직렬화 의도를 표기해야 한다.
package ch17;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Person implements Serializable {
String name;
String job;
public Person() {
}
public Person(String name, String job) {
this.name = name;
this.job = job;
}
public String toString() {
return name + ", " + job;
}
}
public class SerializationTest {
public static void main(String[] args) {
Person personlee = new Person("이진석", "개발자");
Person personyong = new Person("용현정", "회사원");
try (FileOutputStream fos = new FileOutputStream("serial.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(personlee);
oos.writeObject(personyong);
} catch (IOException e) {
System.out.println(e);
}
try (FileInputStream fos = new FileInputStream("serial.txt");
ObjectInputStream ois = new ObjectInputStream(fos)) {
Person pLee = (Person)ois.readObject();
Person pYong = (Person)ois.readObject();
System.out.println(pLee);
System.out.println(pYong);
} catch (IOException e) {
System.out.println(e);
} catch (ClassNotFoundException e) {
System.out.println(e);
}
}
}
Person 클래스를 만들고 SerializationTest클래슬 통해서 직렬화를 해보았다.
이름과 직업이라는 부분을 fileiputstream을 통해서 파일에 입력하고 직렬화를 하는 방식의 문제이다.
중요한 점은 "해당 객체에 대한 직렬화 의도를 표기" 해야 하기 때문에, Pesron 클래스 뒤에 serializable을 implements해줌으로써 내가 이 클래스를 직렬화 하겠다는 의도를 보여줄 필요가 있다.