일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- click and drag
- 레이아웃쪼개기
- const 단언문
- 2022
- 반복줄이기
- React Native
- CSS
- 누구나 자료구조와 알고리즘
- JS console
- 타입좁히기
- returnType
- 타입스크립트
- NonNullable
- 개발콘텐츠
- 성능최적화
- typescript
- javascript
- 제네릭
- 티스토리꾸미기
- TSDoc
- vue.js
- 커스텀
- utilty type
- 리액트
- 폰트적용하기
- 공통컴포넌트
- React.js
- Chart.js
- reactjs
- react
- Today
- Total
몽땅뚝딱 개발자
[Java] 직렬화(Serialization)란? 본문
예전 프로젝트에서 배포하기 전에 직렬화를 사용해야한다고해서 명확히 무엇인지 모르고 사용했었다.
당시에는 어플리케이션을 사용하는 동안 계속 그 객체를 사용해야하기 때문이라고 들었다.
'왜 객체를 계속 사용하기 위해서 직렬화를 해야하지?'하는 생각이 들었지만.. 이후로는 너무 바빠서 제쳐두었다.
이제서야 정리해본다. (😭)
◽ 직렬화(Serialize)란?
직렬화에서 직렬이란 단어는 직렬/병렬할 때의 그 직렬이며, 영어로는 Serial이다.
직렬화, 역직렬화를 모두 포괄하여 직렬화라고 한다.
직렬화의 정의는 이렇다.
- 어떤 환경의 데이터 구조를 다른 환경에 전송/저장하기 위하여 바이트(Byte) 포맷으로 변환하는 과정이다.
- 반대의 개념인 역직렬화는 바이트 포맷으로부터 데이터 구조를 추출하는 것이다.
- 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 다시 변환하는 것이다.
- 자바에서 객체를 전송가능한 형태로 만드는 것이다.
◽ 직렬화는 왜 필요할까?
기기마다 서로 다른 가상 메모리 주소 공간을 갖기때문에 *참조형 타입(Reference Type)의 데이터들은 전달할 수 없다.
* 참조형 타입(Reference Type) : 객체, 배열, 함수, 날짜, 정규표현식 등의 타입을 말한다.
따라서 주소값이 아닌 Byte 형태로(즉, 기본형 타입으로!) 직렬화한 데이터로 전달해야 파싱이 가능한 데이터가 된다.
즉, 우리가 만국공통어인 영어를 사용하듯 각자 모두가 알아들을 수 있는 형태로 변환해주는 과정인 것이다.
그리고 직렬화를 하면 VM의 메모리에서 상주하는 객체 데이터를 그대로 영속화(Persistence)할 수 있다.
즉, 프로그램이 종료돼도 사라지지 않는 데이터가 된다.
◽ Java의 직렬화
직렬화 할 객체에 java.io.Serializable 인터페이스를 구현한다.
이 인터페이스안을 살펴보면 정의가 하나도 없는데 인터페이스를 구현하면 자바가 내부적으로 알아서 구현해준다.
만약 비밀번호처럼 보안상 직렬화되면 안되는 값에는 데이터타입에 제어자인 transient를 붙여준다.
(transient가 붙으면 해당 데이터타입의 기본값으로 직렬화된다.)
추가적으로 Javascript에서도 직렬화라는 개념이 있어 따로 추가한다.
stringify()와 parse()는 일하면서도 정말 자주 사용했던 api들인데 이것도 같은 부류였다니..
모르고 쓰는건 정말 무섭다.
◽ Javascript의 직렬화 (JSON의 경우)
// Object -> JSON
let obj = {no:1};
let json = JSON.stringify(obj); // "{"no":1}"
// JSON -> Object
let obj = JSON.parse(json); // {no:1}
출처 및 참고
개인적으로 공부한 내용을 정리하는 블로그로
잘못된 개념을 게시하지않도록 주의하고 있으나 오류가 있을 수 있습니다.
'Development > Java' 카테고리의 다른 글
[JAVA] 배열에 문자열이 포함되어있는지 검사 / 개수 세기 (0) | 2021.12.15 |
---|---|
[JAVA] 배열 출력하기 (0) | 2021.12.13 |