객체를 파일에 쓰거나 전송하기 위해서는 직렬화를 해야 하는데 그러기 위해 객체 클래스에 Serializable 인터페이스를 implements 하게 된다. 하지만 Serializable 인터페이스를 implements 하게 되면 노란색 Warning이 발생한다. The serializable class *** does not declare a static final serialVersionUID field of type long 저렇게 Warning이 발생하지만 동작하는데는 문제가 없다. 그래도 계속 저렇게 Warning이 떠있는데 왜 생기는 것이며 serialVersionUID 는 무엇이길래 없다고 그러는 건가?
serialVersionUID 는 직렬화에 사용되는 고유 아이디인데, 선언하지 않으면 JVM에서 디폴트로 자동 생성된다. 따라서 선언하지 않아도 동작하는데 문제는 없지만, 불안하기 때문에 JAVA에서는 명시적으로 serialVersionUID를 선언할 것을 적극 권장하고 있다.
* JVM에 의한 디폴트 serialVersionUID 계산은 클래스의 세부 사항을 매우 민감하게 반영하기 때문에 컴파일러 구현체에 따라서 달라질 수 있어 deserialization 과정에서 예상하지 못한 InvalidClassException을 유발할 수 있다.
serialVersionUID는 private static final 로 선언하면 된다.
'백엔드 > Java' 카테고리의 다른 글
JVM 튜닝 3 (0) | 2024.03.20 |
---|---|
JVM 튜닝 2 (0) | 2024.03.20 |
JVM 튜닝 1 (0) | 2024.03.20 |
Java Time과 System Time 의 문제해결 (0) | 2024.03.20 |
자바 UTF-8 바이트 (0) | 2024.03.19 |
[Spring] Post 요청과 Content-Type 의 관계 (0) | 2022.09.27 |
객체지향 원칙 (0) | 2022.03.27 |
Spring boot 멀티 프로젝트시 클래스 패스 에러 (0) | 2020.11.10 |
댓글