[ 직렬화(serializable)와 serialVersionID란? ]
객체를 파일에 쓰거나, 파일에서 객체로 읽어오거나 혹은 네트워크를 통해 객체를 전송할 때 serializable 인터페이스를 구현(직렬화)하는 것을 본적 있을 것이다.
그림 직렬화란 무엇일까?
쉽게 말해
직렬화??
- 객체를 전송하는 것은 파일로도 네트워크를 통해 서버로, 프로그램과 프로그램 사이에 많을 것이고
또한, 서로 다른 언어를 사용하는 이들이 데이터를 주고 받으려면 주고받는 쪽이 모두 이해할 수 있는 언어가 필요할 것이다.
예를들자면
A -> B로 보낼 때 A는 프랑스 사람이고 B는 한국 사람인데 둘 다 서로의 언어는 모르지만 둘 다 영어는 할 줄 안다치면
둘이 데이터를 주고받을 때 객체를 영어로 변환(직렬화)하는 것이다. 그리고 주고 받으면 자신들의 언어로 역직렬화 하는 것!
그럼 비유를 마저 들어
serialVersionID는 무엇일까?
- 서로 데이터를 주고 받는 과정에서 여러군대와 주고받다보면 어떤 클래스인지 정확히 구분이 어려운 경우가 있을 것이다.
즉, 주고받은 클래스 객체를 고유하게 구분하는 코드와 같은 것!
따라서, 주로 JAVA DTO 클래스에 implements Serializable했을 때
final static Long serialVersionID = ~~ 라고 지정을 하지 않으면 노란색 삼각형으로 warning이 발생하는 것을 볼 수 있다.
하지만, 구현하지 않을 경우는 자바 컴파일러가 자동으로 default로 생성해주게 된다.
하지만, 경고는 보기 싫으니까 클래스 명에서 ctrl + 1눌러 serialVersionID를 자동으로 생성해주도록 하자.
(간혹 자동생성이 안뜨는 경우... 자동생성 플러그인을 이용하자.)
'스터디 > Java' 카테고리의 다른 글
스트림(Stream) - Java8 (0) | 2019.07.11 |
---|---|
자바 정규표현식 (0) | 2018.10.19 |