serialVersionUID의 역할:
직렬화 중에 버전 호환성을 유지하기 위해 역직렬화는 버전이 업그레이드될 때 개체의 고유성을 계속 유지합니다.
두 가지 생성 방법이 있습니다.
하나는 기본 1L입니다. 예를 들면 다음과 같습니다. private static final long serialVersionUID = 1L;
하나는 클래스 이름, 인터페이스 이름, 멤버 메서드 및 속성 등을 기반으로 다음과 같은 64비트 해시 필드를 생성하는 것입니다.
개인 정적 최종 긴 serialVersionUID = xxxxL;
클래스가 직렬화 가능 인터페이스를 구현할 때 serialVersionUID가 정의되지 않은 경우 Eclipse는 이를 제공합니다.
프롬프트 기능은 이를 정의하라고 알려줍니다. Eclipse에서 클래스의 경고 아이콘을 클릭하면 Eclipse가
2세대 방법이 자동으로 제공됩니다. 정의하고 싶지 않다면 다음과 같이 할 수도 있습니다.
이 기능을 끄고 다음과 같이 설정할 수 있습니다.
창 ==> 환경 설정 ==> Java ==> 컴파일러 ==> 오류/경고 ==>
잠재적인 프로그래밍 문제
serialVersionUID가 없는 직렬화 가능 클래스의 경고를 무시하도록 변경하세요.
호환성 문제를 고려하지 않는 경우에는 이 기능을 끄십시오. 그러나 어떤 카테고리에서든 직렬화 가능 인터페이스를 구현하는 한, serialVersionUID가 추가되지 않으면 Eclipse에서 경고 메시지를 표시합니다. 클래스 직렬화 가능은 이전 버전과 호환됩니다.
클래스가 직렬화되어 하드 디스크에 저장되었지만 나중에 클래스 필드를 변경(추가, 축소 또는 이름 변경)하는 경우 역직렬화할 때 예외가 나타나 비호환성 문제가 발생합니다.
그러나 serialVersionUID가 동일한 경우 유형의 기본값을 사용하여 다양한 필드를 역직렬화하므로 비호환성 문제를 피할 수 있습니다.