출처 ===> http://hyeonstorage.tistory.com/253
serialVersionUID 이란? Warning 해결하기
객체를 파일에 쓰거나 전송하기 위해서는 직렬화를 해야 하는데 그러기 위해 객체 클래스에 Serializable 인터페이스를 implements 하게 된다.
[JAVA] 객체 직렬화 ObjectInputStream / ObjectOutputStream
하지만 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 로 선언하면 된다.
그럼 serialVersionUID는 어떻게 생성하면 될까?
이클립스에서는 serialVersionUID를 자동으로 선언해주는 플러그인 있다.
위의 파일을 다운받고 압축을 풀어서 eclipse\plugin 폴더에 넣어 놓고 이클립스를 재시작 한다.
serialVersionUID 를 생성하고자 하는 (Serializable을 implements 한) 클래스에 마우스 오른쪽 버튼을 누르면
아래 그림과 같이 Add SerialVersionUID 가 있다.
Add SerialVersionUID를 클릭하면 serialVersionUID가 생성된다.
앞에 private를 붙여서 private static final long 형태가 되도록 하자.
이제 노란 Warning이 없어지는 것을 볼 수 있다.
Warning을 없애는 방법은 SerialVersionUID 선언 외에 다른 방법이 있다.
클래스 위에 @SuppressWarnings("serial") 이라고 어노테이션 처리를 해주면 없어진다.
하지만 SerialVersionUID를 선언해주는 것이 권장되는 방법이다.
'개발자이야기 > JAVA이야기' 카테고리의 다른 글
xls,ppt to pdf (openoffice 활용) (0) | 2014.07.24 |
---|---|
poi 관련 (0) | 2014.07.15 |
Serializable 과 transient 의미와 사용법 (0) | 2014.07.01 |
gson for json library (google) - user guide (0) | 2014.06.27 |
java file read/write 잘정리된 곳 (0) | 2014.03.21 |