본문 바로가기

Java/공부공부

[Java/intelliJ] Serializable 인터페이스 / 객체 직렬화 & 역직렬화

 

* 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

 

Serializable 인터페이스에 대하여

Serializable (직렬화)에 대하여 최근 학교에서 진행한 프로젝트와 토이 프로젝트를 진행하면서 자바 기초 지식에 대한 부족함을 뼈져리게 느끼게 되었다.😭 그래서 '자바의 신' 이라는 자바 기본

1-7171771.tistory.com

 

https://www.skyer9.pe.kr/wordpress/?p=6310

 

serialVersionUID 의 용도 – 상구리의 기술 블로그

serialVersionUID 의 용도 Serializable 직렬화 (implements Serializable) 는 서버간 데이타를 전송할 때, 송신 서버에서 클래스를 전송가능한 바이너리 형식으로 변경하고, 수신 서버에서 전송된 바이너리 데

www.skyer9.pe.kr

 


 

* 직렬화 ( Serialization )  

객체의 상태를 바이트스트림으로 변환하는 과정.  

이후 파일, 데이터베이스, 메모리 등에 저장하거나 다른 서버로 전송 할 수 있다.

 

* 역직렬화 ( Deserialization )

바이트스트림을(직렬화된 객체) 원래의 객체 상태로 복구하는 과정. 

 

ex) 객체를 다른 서버로 전송.

송신 서버에서 객체를 직렬화 할 때, 클래스 정보와 함께  serialVersionUID 를 바이너리 스트림에 포함시킨다.

수신 서버에서 객체를 역직렬화 할 때,

JVM은 바이너리 스트림에 포함된 serialVersionUID와 로컬 serialVersionUID를 비교.

일치한다면(양쪽 클래스의 버전 일치) 스트림에 포함된 데이터로 객체의 인스턴스를 메모리에 복구. 

일치하지 않는다면(클래스의 정의가 변경) InvalidClassException 발생.

 


 

https://blog.naver.com/kkson50/220564273220

 

[완벽해설] serialVersionUID에 대한 정확한 설명

자바에서 컴파일을 할때, 아래와 같은 워닝이 발생을 하였습니다. 그 원인과 해결방법을 찾아보록 하...

blog.naver.com

 

'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