본문 바로가기
웹개발지식쌓기

[back] 자바의 직렬화 (Serialzation : implements Serializable)

by developer_j 2024. 2. 1.
728x90
반응형

자바의 직렬화 (implements Serializable)



1. java에서 직렬화란?

 데이터 객체를 전송하기 쉬운 형태로, 객체 상태를 저장하는 일련의 바이트로 바꾸는 과정 (자료구조 저장)
 처음에는 이렇게 적어놓은 글들을 보면서 뭔말이지 싶었는데 이렇게 말고는 설명할 방법이 ..



2. 직렬화를 사용하는 이유

 구글링 해서 접한 여러 글들을 읽어봤을 때, 내가 이해한 바는 이렇다.

-

 시스템과 시스템 간에, 네트워크로 데이터 교환을 하기 위해서는
 서로 데이터를 알아먹을 수 있는 자료구조 양식(class)이 있어야하고, 그 양식이 이 양식인지 알아차리기 위해서는 양식번호(serialVersionUID)가 있어야 한다.

 

비루한 나의 ppt 실력.. 이지만 이런 느낌

 


 내가 사용자에게 이름과 연락처를 적을 수 있는 양식을 줬지만, 사용자는 그 양식이 어떤 양식인지 모르고 양식의 이름칸에 연락처를 적을수도 있고 아예 적지 않을 수도 있다.
 따라서 서로 주고 받는 데이터가 유효하기 위해, 유의미한 데이터를 주고 받기 위해 직렬화가 필요한 것이다.
 
 데이터 전송은 파일이든 단순 텍스트든 어쨌든 결국 바이트 형태로 전송 / 저장하게 된다. 
 전송과 저장을 하기 위해서는 정해진 규칙의 자료구조에 따라 소통하는 것이 가장 적합하다.
 결국, serialVersionUID는 시스템이 특정 자료구조를 인식하기 위한 id인 것이다.

-

 객체를 저장하고, 불러올 때 serialVersionUID를 사용한다. 
 다른 분들이 테스트한 소스들을 보면, 
 main 메소드에서 한번 사용한 객체의 serialVersionUID 번호를 수정해 다시 호출 했을 때 InvalidClassException 오류가 뜨는 것을 확인 할 수 있었다.


3. Serializable 사용하기

implements Serializable 구문으로 Serializable 인터페이스를 상속한다.
Serializable 인터페이스는 아무 내용이 없는 인터페이스지만, 이 객체를 [직렬화] 하겠다 라는 의도를 표시하는 Marker Interface다.


Serializable 인터페이스를 상속하고, serialID가 없으면 클래스명에 노란색 줄이 그어진다.
2번째의 Add generated serial version ID를 클릭해서 시리얼 넘버를 생성해주면 된당

세번째, 네번째는 노란줄이 뜨는 것을 무시하기 기능이므로 진짜 무시해준다.

 

3-1. Add default serial version id?

Add default serial version id 를 눌러보면, 아래와 같은 uid가 생성이 된다.

private static final long serialVersionUID = 1L;



관련해서는 외국 사이트 질의글에서 나름 답을 얻었다. 물론 구글번역기의 힘을 빌려..

The use of 1L depends on the justification. If it is implemented without any change while the serialization compatibility is altered, it can lead to a problem, indicating a broken serialization protocol. However, if 1L is used as the initial version and incremented manually when required, then it is acceptable. The value of the version is not significant, except in some uncommon scenarios, as long as it is maintained appropriately.

 

즉, 기본으로 1을 두고 계속 증가시켜야 하는,, 시퀀스같은 역할 일 때 쓴다는 얘기 같다.
이런 경우라면 serialize한 객체가 네트워크 통신용 객체라기보다는, 로컬에 계속 두고두고 써야하는 경우가 아닐 까 싶다.

 

 

끝! 

 


<참조한 글들>

2.
https://onlyfor-me-blog.tistory.com/494
https://datacook.tistory.com/84
https://zoetechlog.tistory.com/94
https://m.blog.naver.com/writer0713/220922099055
https://webprogrammer.tistory.com/2027 

3-1. 외쿡 질의글
https://copyprogramming.com/howto/is-serialversionuid-1l-better-than-generate-serial-version-id




728x90
반응형