티스토리 뷰
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를 구해야하는 데 이클립스의 경우 플러그인을 통해서 쉽게 구할수 있습니다.
- 설치방법은 아래를 참고하세요.
- 설치방법은 아래를 참고하세요.
관련글
끝으로
이 글이 도움이 되었다면, 하단의 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 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 이펙티브자바
- java
- 이펙티브
- 텐트
- windows
- JavaFX 종료
- JavaFX 테이블뷰
- 배낭여행
- 자전거
- TableView
- 이펙티브 자바
- git
- 자전거 여행
- springboot
- 자바
- JavaFX Table View
- JavaFX Window Close
- 일본 자전거 여행
- 배낭 여행
- effective java
- JavaFX
- intelij
- 일본 배낭여행
- 스프링부트
- 방통대 과제물
- Java UI
- effectivejava
- 일본여행
- 인텔리제이
- 일본 여행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함