[ 직렬화와 역직렬화의 개념 ]
직렬화
- 다양한 컴퓨터 프로그래밍 분야에서 데이터를 저장하고 전송하기 위해 사용되는 개념
- 객체의 상태나 데이터를 일련의 바이트로 변환하여 저장하거나 전송할 수 있도록 하는 과정
- JVM 메모리에 상주되어 있는 객체 데이터를 바이트 형태로 변환하는 기술
쉽게 말해 컴퓨터가 이해할 수 있는 데이터를 사람이 이해할 수 있는 형태로 바꿔주는 과정 !!
직렬화를 통해 컴퓨터가 데이터를 저장하거나 네트워크를 통해 보낼 때, 우리가 이해할 수 있는 형태로 바뀌어서 전달되거나 저장된다.
역직렬화
- 바이트로 변환된 데이터를 원래대로 객체나 데이터로 변환하는 기술
직렬화의 반대로, 사람이 이해할 수 있는 데이터를 컴퓨터가 이해할 수 있는 형태로 바꿔주는 것이다.
이 과정을 통해 데이터를 컴퓨터가 받은 데이터를 다시 자신(컴퓨터)이 이해라 수 있는 형태로 바꿔서 사용할 수 있다.
컴퓨터 언어? 사람 언어?
[ 컴퓨터 언어 ]
컴퓨터 언어는 여러가지가 있지만 다음과 같이 크게 3가지로 볼 수 있다.
1. 어셈블리어(Assembly Language)
사람이 이해하기 쉬운 형태의 기호화 기계어 명령어로 구성되어 있어서, 조금 더 사람이 읽기 편한 형태의 저수준 언어이다.
section .data num1 db 5 ; 변수 num1에 5를 할당 num2 db 7 ; 변수 num2에 7을 할당
2.고급언어(High-Level Language)
사람이 쉽게 이해하고 코딩하기 편한 언어로서 Python, Java, C++ 등이 이에 해당한다.
이런 언어는 컴퓨터가 직접 이해하기 어렵기 때문에 컴파일러나 인터프리터를 통해 이진수 형태로 변환되서 컴퓨터가 실행될 수 있는 명령어로 바뀐다.
3. 머신 코드(Machine Code)
0,1 로 이루어진 이진수를 사용해서 정보를 처리하고 저장한다.
모든 데이터와 명령어가 이진수 현태로 변환되어 컴퓨터 내에서 처리된다.
[ 사람언어 ]
사람언어는 말그대로 한국어나 영어등 소통하는 자연어이다.
사람 언어 -> 컴퓨터 언어로 변환하는 과정에는 텍스트를 ASCII 나Unicode 와 같은 문자 인코딩 방식을 사용하여 숫자로 변환하는 것이 포함된다.
[ 참고 ] ASCII 코드란 ? / 아스키코드를 사용한 문제 해결 예시
2023.09.14 - [TIL] - TIL | ASCII Code
2023.09.14 - [코테연습/프로그래머스] - ⭐ 코딩 기초 트레이닝 > 문자 개수 세기 Java #ASCII Code
JSON 데이터 처리에서의 직렬화&역직렬화
JSON 데이터를 Javascirpt 로 변환해서 사용하거나 그 반대의 경우에도 직렬화와 역직렬화가 적용되는데
개념을 알아보자
[ 직렬화 ]
- JavaScript 객체 -> JSON 데이터로 변경 ( 서버로 전송하기 위함 )
- stringify() 메서드 이용
[ 역직렬화(Deserializing) ]
- JSON 데이터 -> JavaSricpt 객체 ( 서버로 전송된 문자열(JSON 데이터) 파싱)
- parse() 메서드 이용
Java 에서 직렬화&역직렬화
- Seriallization 인터페이스
- Serializable 인터페이스를 구현한 클래스
- serialVersionUID : 자바 클래스이 직렬화와 관련된 버전 관리를 위한 식별자
자바에서 객체를 직렬화할 때, 객체의 클래스 정보와 필드 값들을 직렬화하는데,
이때 클래스의 구조가 변경되면 문제가 발생할 수 있다.
예를 들어, 객체를 직렬화한 후 클래스의 필드를 수정하거나 구조를 변경하면
이전에 직렬화된 데이터를 역직렬화할 때 문제가 발생할 수 있다.
클래스 내부에 serialVersionUID 값을 명시함으로서, 직렬화된 데이커와 클래스 구조 간의 버전을 식별할 수 있음
- serialVersionUID 값을 지정하는 방법
private static final long serialVersionUID = 123456789L;
여기서 '1234567L' 는 임의의 값을 대신 사용한 것임
이 값은 클래스가 변경될 때마다 수동으로 업데이트되어야 하며, 그렇지 않은 경우 변경할 필요는 없다
serialVersionUID 값을 명시적으로 지정하지 않으면 자바 런타음은 클래스의 구조를 기반으로 자동으로 버전을 생성한다
static final long serialVersionUID = 1L;
'CS 용어 및 개념' 카테고리의 다른 글
RESTfull API 란? (1) | 2023.12.28 |
---|---|
ASCII Code 란? (0) | 2023.09.14 |
IP - IPv4, IPv6 (0) | 2023.05.11 |
모듈, 모듈화 (0) | 2023.04.20 |
로깅, 비즈니스 로직, 트랜잭션 (0) | 2023.04.20 |