본문 바로가기

Server/Spring

[TIL] 직렬화(Serialization) - ObjectOutputStream, ObjectInputStream, 객체를 파일에 저장하다.

반응형
SMALL

바우처 관리 시스템을 만들어보는 과제를 진행하면서, 프로그램이 종료 및 재실행 후에도 저장된 객체 정보를 불러와야 했기에 객체를 파일에 저장하는 방법이 필요했다.

 

그래서 구글링으로 공부해봤다. ㅇㅅㅇ

 

 

특정 클래스를 객체화 하여 파일이나 네트워크로 write 하는 것을 직렬화(Serialization) 라고 한다.

반대로, write 되어 있는 객체를 읽어올 때는 역직렬화(Deserialization) 한다고 한다.

 

클래스 구현

class Voucher implements Serializable {
    private UUID voucherId;
    private long amount;
    private long discount;

...

}

우선 클래스에서 Serializable 을 구현하여 직렬화가 가능한 클래스로 만들어 주어야 한다.

 

 

🐶 ObjectOutputStream (객체 쓰기)

FileOutputStream fileOutputStream = new FileOutputStream(파일 경로 및 이름)
ObjectOutputStream objectOutputStream = new ObjectOutputStream();

objectOutputStream.writeObject(객체 데이터);

objectOutputStream.close();

객체를 파일에 저장할 때는 ObjectOutputStream 을 사용한다.

먼저, "파일"에 쓰기 위해 FileOutputStream 을, "객체"를 쓰기 위해 ObjectOutputStream 을 사용한다. FileOutputStream을 ObjectOutputStream 으로 넘긴 후, writeObject 로 객체 데이터를 파일에 쓰고 저장할 수 있다. 과정이 끝났으면 close() 로 닫아준다.

 

🐾 ObjectInputStream (객체 읽기)

FileInputStream fileInputStream = new FileInputStream(파일 경로 및 이름);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);

Voucher voucher = (Voucher)objectInputStream.readObject();

objectInputStream.close();

객체를 파일에서 읽어올 때는 ObjectInputStream 을 사용한다.

"파일"에서 읽어오기 위해 FileInputStream 을, "객체"를 읽어오기 위해 ObjectInputStream 을 사용한다. FileInputStream 을 ObjectInputStream 으로 넘긴 후, readObject 로 객체 데이터를 파일에서 읽어올 수 있다. (형 변환 필요) 과정이 끝났으면 close() 로 닫아준다.

 

 

 

 

 

References

https://reakwon.tistory.com/160

https://codedragon.tistory.com/5316

반응형
LIST