1. 직렬화(Serialization)란?
직렬화의 정의는 데이터구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정입니다.
즉, 다른 환경으로 데이터를 전송하거나 저장할 때 서로 재구성할 수 있는 형태로 변환하고 역변환하는 것을 직렬화/역직렬화라고 합니다.
2. Java에서의 사용
Java에서 사용하는 곳은 다른 곳으로 전송 혹은 전송 받을 때 사용하거나 특정 객체를 영속화(메모리가 아닌 영속적인 디스크에 저장할 때) 사용한다.
예를 들어보면 Java 에서는 ObjectOutputStream 클래스로 객체를 저장할 수 있는데 이때 매개변수로 넘길 수 있는 것은 Serializable의 구현체만 가능하다. 즉, 직렬화가 가능하도록 한 객체를 byte로 직렬화 하여 저장한다.
다시 ObjectInputStream을 통해 byte 형태의 객체를 불러와 Deserializable을 통해서 역직렬화 할 수 있다.
직렬화(Serialization) 조건
- java.io.Serializable 인터페이스를 상속받아야 한다.
public class Car implements Serializable {
private String name;
private int value;
private int power;
public Car(String name, int value, int power) {
this.name = name;
this.value = value;
this.power = power;
}
@Override
public String toString() {
return "...";
}
}
역직렬화(Deserialization) 조건
- 직렬화 대상이 된 객체의 클래스가 Classpath에 존재해야하고 import 되어 있어야 한다.
- 직렬화 대상 객체는 동일한 serialVersionUID를 가지고 있어야 한다.
위와 같은 조건들을 만족시키면 Java에서의 직렬화를 구성할 수 있습니다. 하지만 위에서 글로 간략하게 적은 직렬화/역직렬화는 웹 개발 소스에서 그렇게 많이 접하는 로직은 아닙니다.
더 많이 사용하고 들어보았던건 JSON, CSV같은 형태의 직렬화/역직렬화 입니다. 여기서 가장 많이 사용하는 JSON에 대해서 살펴보겠습니다.
일반적인 JSON 직렬화 방법
1. pom.xml에 디펜던시 추가
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
2. Object를 Json으로 직렬화
@Test
public void objectToJson() {
Car car = new Car("차", 10, 20);
String jsonResult = new ObjectMapper().writeValueAsString(car);
System.out.println(jsonResult);
}
class Car {
String name;
int value;
int power;
public Car(String name, int value, int power) {
this.name = name;
this.value = value;
this.power = power;
}
}
3. Json을 Object로 역직렬화
@Test
public void objectToJson() {
ObjectMapper mapper = new ObjectMapper();
//test.json에 car 객체 직렬화로 저장
System.out.println(mapper.readValue(new File("test.json"), new ArrayList<Car>().getClass()));
}
반응형
'Web > 웹 상식' 카테고리의 다른 글
[GraphQL] GraphQL 처음 시작하기 (0) | 2021.08.12 |
---|---|
HandlerMethodArgumentResolver에 대해서 (0) | 2021.07.13 |
HTTP/3에 대해서 (0) | 2021.06.26 |
Redis에 대해서 (0) | 2021.06.11 |
Design Pattern 디자인 패턴에 대해서 (0) | 2021.06.04 |