[java] Gson 라이브러리에서 날짜 및 시간 값을 다루는 방법은?

Gson은 기본적으로 날짜 및 시간 값을 직렬화 및 역직렬화할 때 기본 형식을 사용합니다. 하지만 때로는 우리가 원하는 형식으로 날짜를 표현하고 싶을 수 있습니다. 이 경우에는 Gson의 커스텀 직렬화 및 역직렬화를 사용하여 원하는 형식을 정의할 수 있습니다.

먼저, 커스텀 직렬화를 사용하여 날짜 값을 JSON 형식으로 변환하는 방법을 살펴보겠습니다. Gson은 JsonSerializer 인터페이스를 통해 직렬화를 처리합니다. 다음은 날짜 값을 yyyy-MM-dd 형식의 문자열로 직렬화하는 예제 코드입니다.

import java.lang.reflect.Type;
import java.time.LocalDate;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;

public class LocalDateSerializer implements JsonSerializer<LocalDate> {

    @Override
    public JsonElement serialize(LocalDate date, Type typeOfSrc, 
                                 JsonSerializationContext context) {
        return new JsonPrimitive(date.toString());
    }
}

이제 커스텀 직렬화를 사용하여 JSON 값을 날짜로 역직렬화하는 방법을 알아보겠습니다. Gson은 JsonDeserializer 인터페이스를 통해 역직렬화를 처리합니다. 다음은 yyyy-MM-dd 형식의 문자열을 LocalDate로 역직렬화하는 예제 코드입니다.

import java.lang.reflect.Type;
import java.time.LocalDate;
import com.google.gson.JsonElement;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonParseException;

public class LocalDateDeserializer implements JsonDeserializer<LocalDate> {

    @Override
    public LocalDate deserialize(JsonElement json, Type typeOfT, 
                                 JsonDeserializationContext context) throws JsonParseException {
        String dateStr = json.getAsString();
        return LocalDate.parse(dateStr);
    }
}

이제 Gson 객체를 생성하고 커스텀 직렬화 및 역직렬화 기능을 등록해야 합니다. 다음은 Gson 객체를 생성하고 커스텀 직렬화 및 역직렬화 기능을 등록하는 예제 코드입니다.

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.time.LocalDate;

public class GsonExample {

    public static void main(String[] args) {
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(LocalDate.class, new LocalDateSerializer());
        gsonBuilder.registerTypeAdapter(LocalDate.class, new LocalDateDeserializer());
        Gson gson = gsonBuilder.create();

        // Serialize
        LocalDate date = LocalDate.now();
        String json = gson.toJson(date);
        System.out.println("Serialized JSON: " + json);

        // Deserialize
        LocalDate deserializedDate = gson.fromJson(json, LocalDate.class);
        System.out.println("Deserialized Date: " + deserializedDate);
    }
}

위의 예제 코드에서는 Gson 객체를 생성하고 registerTypeAdapter 메소드를 사용하여 LocalDate 클래스에 대한 커스텀 직렬화 및 역직렬화 기능을 등록합니다. toJson 메소드를 사용하여 LocalDate 객체를 JSON으로 직렬화하고, fromJson 메소드를 사용하여 JSON을 LocalDate로 역직렬화합니다.

이제 Gson을 사용하여 날짜 및 시간 값을 다루는 방법에 대해 알게 되었습니다. 커스텀 직렬화 및 역직렬화를 사용하면 Gson을 더욱 유연하게 사용할 수 있습니다.