본문 바로가기
백엔드/Java

serialVersionUID 이란? Warning 해결하기

by david100gom 2024. 3. 20.

객체를 파일에 쓰거나 전송하기 위해서는 직렬화를 해야 하는데 그러기 위해 객체 클래스에 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

댓글