본문 바로가기

Web/웹 상식

Java의 직렬화란

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