티스토리 뷰

Java

직렬화

Alledy 2019. 5. 14. 14:40

직렬화(Serialization)

  • def: 객체를 데이터 스트림으로 만드는 것. 객체에 저장된 데이터를 스트림에 쓰기(write) 위해 연속적인(serial) 데이터로 변환하는 것을 의미한다. 반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것은 역직렬화(deserialization)이라고 한다.
  • 객체란 클래스에 정의된 인스턴스 변수의 집합이다. 객체에는 클래스변수나 메서드가 포함되지 않는다. 객체는 오직 인스턴스 변수로만 구성되어 있다.
  • 그래서 객체를 저장한다는 것은 객체의 모든 인스턴스 변수값을 저장하는 것과 같은 의미이다.

ObjectInputStream, ObjectOutputStream

  • 직렬화에는 ObjectOutputStream을 사용하고 역직렬화에는 ObjectInputStream을 사용한다.

  • 예시

    // objectfile.ser이라는 파일에 UserInfo객체를 직렬화해서 저장
    FileOutputStream fos = new FileOutputStream("objectfile.ser");
    ObjectOutputStream out = new ObjectOutputStream(fos);
    
    out.writeObject(new UserInfo()); 
    
    // 역직렬화
    FileInputStream fis = new FileInputStream("objectfile.ser");
    ObjectInputStream in = new ObjectInputStream(fis);
    
    UserInfo info = (UserInfo)in.readObject(); // Object -> UserInfo 형변환
    

     

직렬화 가능한 클래스 만들기

  • Serializable, transient

    java.io.Serializable 인터페이스를 구현하도록 하면 된다. 다만 해당 클래스가 Object객체와 같이 직렬화가 불가능한 객체를 포함하고 있을 수도 있다. 이 때 직렬화를 시도하면 에러가 나는데, 이를 해결하기 위해서는 변수 앞에 transient를 붙이면 된다. transient 가 붙으면 직렬화 대상에서 제외한다는 의미로, 직렬화가 되지 않거나 의도적으로 제외하고자 하는 변수 앞에 붙이면 된다.

'Java' 카테고리의 다른 글

JDBC 데이터 삽입, 수정, 삭제  (0) 2019.05.22
JDBC  (0) 2019.05.22
스트림  (0) 2019.05.13
I/O programming  (0) 2019.05.13
컬렉션 프레임워크, ArrayList, LinkedList  (0) 2019.05.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함