티스토리 뷰

SerialVersionUID

  • 객체를 직렬화 하면 그 객체(그 객체와 관련된 모든 객체 포함) 에는 그 객체가 속한 클래스의 버전 ID 번호가 찍힙니다. 그  ID를 serialVersionUID 라고 부르며 그 값은 클래스 구조에 대한 정보를 바탕으로 계산 됩니다.
  •  객체를 역직렬화 할 때 구 객체를 직렬화 한 다음게 클래스가 변경되었으면 클래스의 serialVersionUID는 다를 수 있습니다. 하지만 이런 문제를 해결할 수 있는 벙법이 있습니다.

해결방법

클래스가 바뀔 가능성이 있다고 생각이 들면 클래스에 직렬 버전 ID 집어넣으세요

  •  Java 에서 어떤 객체를 역직렬화하려고 할 때는 직렬화된 객체의 serialVersionUID와 JVM에서 그 객체를 역직렬화하는 데 사용 한 클래스의 직렬 버전 ID를 비교합니다.
  •  문제 상황 :  예를 들어 어떤 Dog 인스턴스를 직렬화할 당시의 ID가 23( 사실은 더 복잡합니다.) 이라고 할 때, JVM 에서 그 Dog 객체를 역직렬화하려고 할 때 우선 Dog 객체의 serialVersionUID값과 Dog 클래스의 serialVersionUID 값을 비교합니다. 두 숫자가 같지 않으면 JVM에서는 지금 사용하는 클래스가 객체를 직렬화 할때 썼던 클래스와 호환성이 없는 것으로 간주하고 역직렬화 과정에서 예외를 발생시킵니다.
  •  이런 문제를 해결허려면 클래스에 serialVersionUID를 집어넣은 다음 클래스가 바뀌더라도 똑같은 값을 갖게 해서 클래스가 변경 되더라도 JVM에서는 "클래스가 직렬화된 객체와 호환되는 군" 이라고 생각하게 해야 합니다

 

 
lass Dog implements serializable{
    static final long serialVersionUID = 
                    -68497944707546677410L;
    private String name;
    private int size;
    // 메소드 들어감
}
cs

 

  •  위와 같은 형식으로 말이죠. 하지만 serialVersionUID를 구해야하는 데 이클립스의 경우 플러그인을 통해서 쉽게 구할수 있습니다. 
    •  설치방법은 아래를 참고하세요.

 

[이클립스] Eclipse에서 serialVersionUID 자동으로 생성해주는 플러그인(Plugin) 설치해서 사용하기

이클립스에서 serialVersionUID 자동으로 생성해주는 플러그인이 있어서 소개를 드립니다. 아래 파일 다운로드 받아서 압축을 풀고 [eclipse > plugin] 폴더에 넣어주시면 됩니다. 플러그인을 넣었다면 이클립스..

zzznara2.tistory.com


관련글

 

(Java) 직렬화된 객체를 파일에 저장하는 방법

Object Serialize 객체의 직렬화란 객체의 내용을 바이트 단위로 변환하여 파일 또는 네트워크를 통해서 송수신이 가능하게 하는 것을 의미합니다. 비유를 하자면 어떤 어드벤쳐 게임이 프로그램이 있다고 합시다...

jinseongsoft.tistory.com

 

JAVA 역직렬화 : 객체 복구

어떤 객체를 직렬화하는 것과 관련된 가장 중요한 점은 나중에 JVM을 다시 실행시킬 때, 또는 아예 다른 JVM에서 실행시킬 때에도 원래의 상태로 되돌릴 수 있어야 한다는 점인데, 역질렬화는 직렬화를 뒤집어놓은..

jinseongsoft.tistory.com

 

[Java] Gson 라이브러리 적용 및 기본 사용법

이번 시간에는 Gson 라이브러리를 적용해보고 간단하게 사용해보는 방법에 대해서 알아보겠습니다. Gson이란? Gson의 정의는 아래와 같습니다. Gson(구글 Gson, Google Gson)은 JSON의 자바 오브젝트의 직렬화, 역..

jinseongsoft.tistory.com

 

(Java) Gson 사용시 ZonedDateTime JSON Serialize/Deserialize 방법

들어가며 Gson을 사용하여 ZonedDateTime 객체를 Serialize/Deserialize 하는 경우가 있다. public void test() { String json = new GsonBuilder().create().toJson(ZonedDateTime.now()); ZonedDateTime dateTim..

jinseongsoft.tistory.com

 


끝으로

이 글이 도움이 되었다면, 하단의 Google 광고 👎👎👎 한번씩 클릭 부탁 드립니다. 🙏🙏🙏

광고 클릭은 많은 힘이 됩니다! 

 

 

출처 : headfirstJava

반응형

'프로그래밍 > JAVA' 카테고리의 다른 글

JAVA Thread에 대해  (0) 2016.11.15
JAVA 엑셀 파일 불러오기  (1) 2016.11.05
JAVA Java.nio 클래스란  (0) 2016.10.27
JAVA 역직렬화 : 객체 복구  (0) 2016.10.26
(Java) 직렬화된 객체를 파일에 저장하는 방법  (0) 2016.10.26
댓글