JUST WRITE

Serialization 본문

Programing/Java

Serialization

천재보단범재 2021. 11. 20. 19:18
이 글은 Baeldung 사이트 'Introduction to Java Serialization'를 해석, 정리한 글입니다.

 

Serialization

Serialization

Serialization객체의 상태를 Byte Stream으로 변환하는 것이다.

Java 객체를 Database에 저장하거나 Network를 통해 전송할 수 있도록 변환하는 것이다.

Deserialization은 반대로 Byte Stream을 객체로 변환하는 것이다.

Serialization
Serialization and Deserialization

Serialization 할 수 있는 Class가 되려면 Marker Interface인 Serializable를 구현해야 한다.

Static Field는 Class에 속하기 때문에 Serialize 되지 않습니다.

transient 키워드를 쓴 Field는 Serialize가 무시됩니다.

public class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    static String country = "ITALY";
    private int age;
    private String name;
    transient int height;

    // getters and setters
}

Serializable Class 상속

Serializable를 구현한 Class 내 모든 Sub Class도 Serializable이 가능하다.

Serializable를 구현한 Class 객체에서 다른 객체를 참조하고 있으면 그 참조 객체도 Serializable 해야 한다.

그렇지 않으면 NotSerializableException이 발생한다.

public class Person implements Serializable {
    private int age;
    private String name;
    private Address country; // must be serializable too
}

Serial Version UID

JVM은 Serializable Class에 각각 Version Number(Long Type)를 매칭 한다.

Serialization, Deserialization 할 때 해당 값을 확인한 후 처리한다.

맞지 않다면 InvalidClassException이 발생한다.

보통 IDE(Integrated Developement Enviorment)에서는 Class명 기준으로 자동으로 생성해주는 경우가 많다.

SerialVersionUID를 따로 설정 안 해도 JVM에서 RunTime에 자동으로 생성해준다.

자동으로 생성하는 경우는 한 가지 compiler에 의존적이게 돼서 추천하지 않는다.

Custom Serialization in Java

Java에서 Serialization을 커스텀할 수 있다.

커스텀을 통해 Serialization이 불가능한 객체를 Serialization 하도록 할 수 있다.

아래 2가지 Method를 Overriding 한다.

private void writeObject(ObjectOutputStream out) throws IOException;

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;

[참고사이트]

 

 

728x90
반응형

'Programing > Java' 카테고리의 다른 글

JRE  (0) 2021.11.28
JVM  (0) 2021.11.27
Optional  (0) 2021.10.31
Log4j vs Logback  (0) 2021.10.26
Interface vs Abstract  (0) 2021.10.21
Comments