08. 기술면접 - 자바 - 직렬화(Serializable)
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다
자바 직렬화란?
- 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로
데이터를 변환하는 기술이다 (주로 네트워크 통신할 때)
- 시스템적으로 이야기하면 JVM의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술
자바 직렬화 조건
1. 자바 기본(primitive) 타입
2. java.io.Serializable 인터페이스를 상속받은 객체
직렬화 방법
- java.io.ObjectOutputStream 객체를 이용
public class Serial implements Serializable {
int a = 10;
int b = 200;
String c = "hello world";
public static void main(String[] args) throws IOException, ClassNotFoundException {
Serial s = new Serial();
ObjectOutputStream oos = new ObjectOutputStream(System.out);
oos.writeObject(s);
}
}
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Serial implements Serializable {
int a = 10;
int b = 200;
String c = "hello world";
public static void main(String[] args) throws IOException {
FileOutputStream file_out = new FileOutputStream("test");
Serial s = new Serial();
ObjectOutputStream oos = new ObjectOutputStream(file_out);
oos.writeObject(s);
file_out.close();
oos.close();
}
}
import java.io.*;
public class Serial implements Serializable {
int a = 10;
int b = 200;
String c = "hello world";
public static void main(String[] args) throws IOException, ClassNotFoundException {
FileInputStream file_in = new FileInputStream("test");
ObjectInputStream ois = new ObjectInputStream(file_in);
Serial o = (Serial) ois.readObject();
System.out.println(o.a);
System.out.println(o.b);
System.out.println(o.c);
}
}
자바 역직렬화 (Deserialization) 란
- 바이트로 변환된 데이터를 다시 객체로 변환하는 기술
- 직렬화 된 바이트 형태의 데이터를 객체로 변환해서 JVM 으로 상주시키는 형태 기술
자바 역직렬화 조건
- 직렬화 대상이 된 객체의 클래스가 클래스 path 에 존재해아하며 import 되어 있어야 한다
ㄴ중요한 점은 직렬화와 역직렬화를 진행하는 시스템이 서로 다를 수 있다는 것을 반드시 고려해야 한다
(같은 시스템 내부이라도 소스 버전이 다를 수 있다.)
- 자바 직렬화 대상 객체는 동일한 serialVersionUID 를 가지고 있어야 함
private static final long serailVersionUID = 1L;
참고
'∞. 기술 면접 > 7. 자바' 카테고리의 다른 글
10. 기술면접 - 자바 - 인터페이스와 추상 클래스 차이 (0) | 2021.10.21 |
---|---|
09. 기술면접 - 자바 - 자바는 항상 CallByValue 이다 (0) | 2021.10.21 |
07. 기술면접 - 자바 - 가비지 컬렉션(Garbage Collection ) 처리 방법 (0) | 2021.10.21 |
06. 기술면접 - 자바 - Non Static 과 Static (0) | 2021.10.21 |
05. 기술면접 - 자바 - OOP 의 4가지 특징과 OOP 5가지 설계 원칙 (1) | 2021.10.20 |
댓글
이 글 공유하기
다른 글
-
10. 기술면접 - 자바 - 인터페이스와 추상 클래스 차이
10. 기술면접 - 자바 - 인터페이스와 추상 클래스 차이
2021.10.21 -
09. 기술면접 - 자바 - 자바는 항상 CallByValue 이다
09. 기술면접 - 자바 - 자바는 항상 CallByValue 이다
2021.10.21 -
07. 기술면접 - 자바 - 가비지 컬렉션(Garbage Collection ) 처리 방법
07. 기술면접 - 자바 - 가비지 컬렉션(Garbage Collection ) 처리 방법
2021.10.21 -
06. 기술면접 - 자바 - Non Static 과 Static
06. 기술면접 - 자바 - Non Static 과 Static
2021.10.21