serialVersionUID 란?
자바에서 serial version uid를 생성하는 것은 기본적으로 서로 다른 클래스들 간의 구별을 하기 위한 것이다.
동일한 이름을 가진 클래스라 하더라도 메소드나 필드가 다를 경우 서로 다른 것으로 인식하는 것이 기본이기 때문에 Object Serialization을 할 때 import/export 등에서 버전에 따라 종종 불일치 에러가 발생하는 것을 만나게 된다.
동일한 이름을 가진 클래스라 하더라도 메소드나 필드가 다를 경우 서로 다른 것으로 인식하는 것이 기본이기 때문에 Object Serialization을 할 때 import/export 등에서 버전에 따라 종종 불일치 에러가 발생하는 것을 만나게 된다.
@SuppressWarning("serial")
Adds a default serial version ID
Adds a generated serial version ID
@SuppressWarnings("serial")
이 세 가지를 추천한다.
그렇다면, 이러한 warning 이 뜨는 이유는 무엇인가?
이것은 바로 serializable과 관계가 있다.
serializable(직렬화)은 인스턴스가 파일에 저장되는 과정을 의미하고,
파일로부터 인스턴스가 복원되는 과정을 deserializable(역직렬화)라고 한다.
이것은 자바에서 java.io.Serializable 이라는 인터페이스로 구현되어 있고,
파일의 입출력 대상이 되는 인스턴스는 이 인터페이스를 구현하거나, 이를 구현하는 클래스를 상속해야 한다.
즉, 우리가 직면하게 되는 이러한 warning을 접하는 상황의 대부분은
이 serializable을 상속하는 상위 클래스, 혹은 인터페이스를 상속 또는 구현하기 때문이다.
(직,간접적인 Serializable인터페이스의 구현)
JAVA API에서는 이러한 직렬화의 대상이 되는 인스턴스에 대해
명시적으로 serialVersionUID를 선언할 것을 적극 권장하고 있다.
(serialVersionUID는 JVM에 의해 default로 자동으로 생성되지만, 이것은 꽤나 불안전하기 때문에..)
※Serializable(직렬화)에 대해서는 검색을 통해서 자세히 알아보자.
여기서는 이에 대한 설명을 생략..
그렇기에, 이클립스는 warning message를 통해,
프로그래머에게 직렬화에 직간접적인 영향을 받고 있음을 알리는 것이고,
그에 따른 해결책으로 serialVersionUID를 생성하거나, @SuppressWarnings("serial") 어노테이션 처리를 해주길 바라는 것이다.
출처 _
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=fochaerim&logNo=70105895049
[Java] serialVersionUID 기본 알고리즘
자바에서 serial version uid를 생성하는 것은 기본적으로 서로 다른 클래스들 간의 구별을 하기 위한 것이다. 동일한 이름을 가진 클래스라 하더라도 메소드나 필드가 다를 경우 서로 다른 것으로
logonjava.blogspot.com
'JAVA' 카테고리의 다른 글
interface를 상속받은 Abstract class를 상속받는 이유. (0) | 2022.11.17 |
---|---|
java10 _ var 키워드 (0) | 2022.11.15 |
Reflection (0) | 2022.09.07 |
Duration.ofSeconds (0) | 2022.08.19 |
Apache Ant (0) | 2022.08.19 |