일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- EC2
- aws s3
- jvm
- Kafka
- zookeeper
- CVAT
- tcp
- kubectl
- grafana
- docker
- java
- JavaScript
- kubernetes
- Network
- log
- Vision
- OS
- ip
- Packet
- CSV
- Python
- Trino
- airflow
- PostgreSQL
- Spring
- kubeadm
- Operating System
- helm
- MAC address
- AWS
- 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 |