| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
- kubernetes
- zookeeper
- log
- Spring
- Operating System
- kubectl
- JavaScript
- tcp
- Trino
- airflow
- MAC address
- CVAT
- jvm
- java
- Network
- Packet
- kubeadm
- docker
- helm
- aws s3
- EC2
- Python
- AWS
- CSV
- grafana
- OS
- PostgreSQL
- Kafka
- Vision
- ip
- Today
- Total
JUST WRITE
Serialization 본문
이 글은 Baeldung 사이트 'Introduction to Java Serialization'를 해석, 정리한 글입니다.

Serialization
Serialization은 객체의 상태를 Byte Stream으로 변환하는 것이다.
Java 객체를 Database에 저장하거나 Network를 통해 전송할 수 있도록 변환하는 것이다.
Deserialization은 반대로 Byte Stream을 객체로 변환하는 것이다.


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;[참고사이트]
'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 | 
 
								 
								 
								