울음참고 개발공부
article thumbnail
728x90

 

 

 

[ 직렬화와 역직렬화의 개념 ]

 

 

직렬화

 

  • 다양한 컴퓨터 프로그래밍 분야에서 데이터를 저장하고 전송하기 위해 사용되는 개념
  • 객체의 상태나 데이터를 일련의 바이트로 변환하여 저장하거나 전송할 수 있도록 하는 과정 
  • 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

 

TIL | ASCII Code

[ 아스키 코드 개념 ] ASCII 초창기에는 다양한 방법으로 문자를 표현했는데, 호환 등 여러 문제가 발생했다. 이런 문제를 해결하기 위해 ANSI에서 ASCII(American Standard Code for Information Interchange)라는

megak.tistory.com

 

2023.09.14 - [코테연습/프로그래머스] - ⭐ 코딩 기초 트레이닝 > 문자 개수 세기 Java #ASCII Code

 

⭐ 코딩 기초 트레이닝 > 문자 개수 세기 Java #ASCII Code

https://school.programmers.co.kr/learn/courses/30/lessons/181902 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

megak.tistory.com

 

 

 

 

 

 

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;

 

 

 

 

 

 

 

 

728x90
profile

울음참고 개발공부

@메각이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!