Java의 직렬화
어떤 객체(class)를 byte로 변환하는 것
Java의 역직렬화
직렬화한 Byte를 다시 객체(Class)로 변환하여 JVM 메모리에 들고 있는 것
직렬화란?
각 언어의 코드를 하위 레벨의 문자열로 변환하는 것이라고 에둘러 얘기할 수 있을 것이다.
직렬화가 필요한 이유
Java객체를 Byte로 변환한 뒤 파일 형태로 저장하고, 다른 시스템에서 가져와 사용할 수 있게 된다.
JVM과 독립적으로 무언가를 저장하고 싶을 때 사용된다.
직렬화 예제
import java.io.Serializable;
public class HelloSerialize implements Serializable {}
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Arrays;
public class TestController {
public static void main(String[] args) throws IOException {
// 직렬화를 상속받은 클래스를 인스턴스화하여 직렬화를 준비한다
HelloSerialize helloSerialize = new HelloSerialize();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(helloSerialize);
byte [] serialized;
serialized = byteArrayOutputStream.toByteArray();
// 클래스를 직렬화하는 코드
System.out.println("serialized = "+ Arrays.toString(serialized));
/*
serialized = [-84, -19, 0, 5, 115, 114, 0, 37, 99, 111, 100, 101, 46, 67, 95, 49, 51, 95, 83, 101, 114, 105, 97, 108, 105, 97, 122, 98, 108, 101, 46, 72, 101, 108, 108, 111, 83, 101, 114, 105, 97, 108, 105, 122, 101, 3, 119, -100, -75, -47, -63, 38, -60, 2, 0, 0, 120, 112]
*/
}
}
java class가 직렬화되어 byte코드로 표기된 것을 확인할 수 있으며,
이 byte를 파일로 저장하거나 다른 시스템에 전송할 수 있다.
예제 깃헙 : https://github.com/waveaway77/KOTLIN2/blob/master/src/code/C_13_Serialiazble/TestController.java
'【 개발 이야기 】' 카테고리의 다른 글
Throwable & Exception (0) | 2025.03.26 |
---|---|
NotBlank, NotNull, NotEmpty 차이 (0) | 2025.03.21 |
[Springboot] 잭슨이란? Json Parser!! (0) | 2025.03.21 |
인터페이스는 왜 필요한걸까요 그건 바로... (0) | 2025.03.14 |
코틀린에서 new 없이 의존성 주입(DI)을 통해 객체를 생성하는 방식 (0) | 2025.03.14 |