* Serializable 인터페이스 ( java.io )
객체를 파일로 저장하거나 다른 서버로 전송할 수 있도록 JVM에 알리는 역할. ( 직렬화* )
메서드가 없는 마커 인터페이스 (marker interface).
package java.io;
public interface Serializable {
}
해당 객체의 클래스에 Serializable 인터페이스를 구현해주면 된다.
import java.io.Serializable;
public class exampleClass implements Serializable {
private static final long serialVersionUID = 1L; // 직렬화 호환성을 위한 UID
.......
}
* SerialVersionUID
객체를 다른 서버로 전송할 때, 해당 객체의 버전 명시해주는 역할로 아래처럼 선언 필요.
(역직렬화*할 때)클래스의 버전이 일치해야 서로 다른 서버에서 같은 클래스의 객체임을 인지하고 처리할 수 있다.
static final long serialVersionUID = 1L;
자동생성도 가능하지만, ( Ctrl + Shift + A _ Serializable class without 'serialVersionUID' 활성화 )
클래스가 변경될 때 serialVersionUID가 변경되어 호환성이 깨질 수 있음. (InvalidClassException 발생.)
static final long serialVersionUID = 3245387866453L;
* transient
해당 변수는 Serializable의 대상에서 제외.
transient private String str;
https://1-7171771.tistory.com/116
https://www.skyer9.pe.kr/wordpress/?p=6310
* 직렬화 ( Serialization )
객체의 상태를 바이트스트림으로 변환하는 과정.
이후 파일, 데이터베이스, 메모리 등에 저장하거나 다른 서버로 전송 할 수 있다.
* 역직렬화 ( Deserialization )
바이트스트림을(직렬화된 객체) 원래의 객체 상태로 복구하는 과정.
ex) 객체를 다른 서버로 전송.
송신 서버에서 객체를 직렬화 할 때, 클래스 정보와 함께 serialVersionUID 를 바이너리 스트림에 포함시킨다.
수신 서버에서 객체를 역직렬화 할 때,
JVM은 바이너리 스트림에 포함된 serialVersionUID와 로컬 serialVersionUID를 비교.
일치한다면(양쪽 클래스의 버전 일치) 스트림에 포함된 데이터로 객체의 인스턴스를 메모리에 복구.
일치하지 않는다면(클래스의 정의가 변경) InvalidClassException 발생.
https://blog.naver.com/kkson50/220564273220
'Java > 공부공부' 카테고리의 다른 글
[Java] 자바 HTTP통신 (HttpURLConnection) (0) | 2024.09.25 |
---|---|
[Java] 자바 HTTP 통신_GET요청 (RestTemplate) (0) | 2024.07.28 |
[Java] Lombok @ 어노테이션 (0) | 2024.03.21 |
[Java] switch ~ case문 (0) | 2024.03.21 |
[Java] Gson / JSON (0) | 2024.03.17 |