0. 출처

[ Java - 직렬화(Serialization) ] http://boxfoxs.tistory.com/314

[ Java의 직렬화(Serialize)란? ] https://nesoy.github.io/articles/2018-04/Java-Serialize



1. 배경

직렬화 방법에는 여러 형식이 존재한다.

표 형태의 다량의 데이터를 직렬화할 때는 CSV 형식, 구조적인 데이터는 XML, JSON 형식이 있다.

객체를 파일로 저장하거나 네트워크를 통해 전송하고 싶은 경우, 객체를 JSON으로 일일이 바꿔서 전송했었다. 

위와 같은 불편한 방식을 사용하지 않고 직렬화를 이용하면 객체 그 자체를 저장하거나 전송할 수 있다.



2. 직렬화

직렬화란 무언가를 일자로 늘어 놓는다는 뜻과 같이, 

JVM(Java Virtual Machine)의 메모리에 상주(힙, 스택)되어 있는 객체 데이터를 스트림에 쓰기 위해 

연속적인 데이터(byte)로 변환하는 것이다. 

객체의 내용을 byte 단위로 변환하여 파일이나 네트워크를 통해 송수신을 가능하게 하고, 외부의 자바 시스템에서도 사용할 수 있게 한다.


객체에는 메소드가 포함되지 않는다. 하나의 클래스에는 여러 객체가 있고, 각각의 객체마다 다른 멤버변수들을 가지고 있다.  

메소드의 경우 모두가 공통적이기 때문에 객체를 저장할때는 메소드를 제외하고 순수하게 값들만 저장하게 된다.

1
2
3
4
5
6
7
class A { 
    int a; 
    int getA() { return a; } 
}
// 클래스 A 에 변수 a 와 함수 getA() 가 있다.
// 직렬화 한다는 것은 변수 a 만 바이트 코드로 나열하는 것이다.
 
cs



3. 조건

java.io.Serializable 인터페이스를 implement한다.

복잡한 데이터 구조의 클래스의 객체라도 Serializable 인터페이스를 구현하면 큰 작업 없이 바로 직렬화, 역직렬화가 가능하다.

Serializable 인터페이스는 구현해야 할 메소드가 없기 때문에 implements 선언만 해주면 된다. 

Serializable 인터페이스를 사용하는 이유는 해당 객체에게 직렬화가 제공되어야 함을 JVM에게 알려주어야 하기 때문이다.



4. 사용방법

java.io.ObjectOutputStream를 사용하여 직렬화를 진행한다.

Java에서는 직렬화를 자동으로 수행해 주는 ObjectInputStream, ObjectOutputStream을 제공한다.






'Java' 카테고리의 다른 글

객체지향 설계  (0) 2018.11.15
static과 final  (0) 2018.08.20
Overloading (오버로딩)  (0) 2018.07.28
Overriding (오버라이딩, 재정의)  (0) 2018.07.28
String, StringBuffer, StringBuilder  (0) 2018.07.17

+ Recent posts