소프트웨어 개발/Java - Basic

SerialVersionUID가 뭐냐?

늘근이 2016. 4. 10. 09:09

가끔 노랑밑줄이 쳐질때가 있다. 이게 무엇인가.

유일한 클래스임을 보장해주기 위한 ID임이다.

클래스는 때때로 필요한 필드가 추가될수도 있으며, 이에 따라 예전에 만들어놓은 클래스와 다른 형태를 가질수 있다. 그럼에도 불구하고 이 두개는 같은것이라고 봐야할 필요가 있으며 이럴때 구분자로 사용할 수 있다.

예를들어 기존에 있던 Person 클래스에 간지남 정도를 표시해주기위해 최근 ganziness 필드를 추가했다고 치자.

예전에 만들어 놓은 Person은 간지와 관련된 필드가 없기 때문에 컴파일러는 이 두개의 객체를 다르게 볼 수 있다.

그렇게 된다면 직렬화를 복원하는 과정에서 두개의 이질감 때문에 컴퓨러는 InvalidClassException을 뱉어낼수 있다.

즉, serialize된 데이터를 다시 클래스로 복원하는 과정에 (Deserialization) 중 InvalidClassException이 발생할 확률이 있기 때문에, 그 객체의 유일성을 보장해주기 위해서 직접 serialVersionUID 를 선언해준다.


아래와같이 private으로 선언해주면 밖에서 바뀔일도 없고 갠찬타

 

private static final long serialVersionUID = -6732354468311278028L;