[java] Guice를 사용한 JSON 직렬화/역직렬화

Guice는 자바의 의존성 주입(Dependency Injection) 프레임워크입니다. 이번 글에서는 Guice를 사용하여 JSON 데이터를 자바 객체로 직렬화(serialize)하고, 자바 객체를 JSON으로 역직렬화(deserialize)하는 방법에 대해 알아보겠습니다.

1. 라이브러리 추가

먼저, Guice와 JSON 직렬화/역직렬화를 위해 javax.json-apiorg.glassfish.gmbal-api 라이브러리를 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음과 같이 의존성(dependency)을 추가합니다.

<dependencies>
    <dependency>
        <groupId>com.google.inject</groupId>
        <artifactId>guice</artifactId>
        <version>4.2.3</version>
    </dependency>
    <dependency>
        <groupId>javax.json</groupId>
        <artifactId>javax.json-api</artifactId>
        <version>1.1.4</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.gmbal</groupId>
        <artifactId>gmbal-api-only</artifactId>
        <version>4.0.1-b003</version>
    </dependency>
</dependencies>

2. 모듈 생성

다음으로, Guice의 AbstractModule 클래스를 확장한 모듈을 생성합니다. 이 모듈은 JSON 직렬화/역직렬화를 위한 바인딩을 설정합니다.

import com.google.inject.AbstractModule;
import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;

public class JsonSerializationModule extends AbstractModule {

    @Override
    protected void configure() {
        bind(Jsonb.class).toInstance(JsonbBuilder.create());
    }
}

위 코드에서는 Jsonb 인터페이스의 인스턴스를 Guice에 바인딩합니다. Jsonb 인터페이스는 JSON을 자바 객체로 변환하는 기능을 제공합니다.

3. JSON 직렬화/역직렬화 사용

이제 Guice를 사용하여 JSON 직렬화/역직렬화를 할 수 있는 준비가 되었습니다. 예를 들어, 다음과 같은 자바 객체가 있다고 가정해 봅시다.

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

이 객체를 JSON으로 직렬화하기 위해 다음과 같이 Guice를 사용합니다.

import com.google.inject.Guice;
import javax.json.bind.Jsonb;

public class Main {

    public static void main(String[] args) {
        Jsonb jsonb = Guice.createInjector(new JsonSerializationModule())
                .getInstance(Jsonb.class);

        Person person = new Person("John Doe", 25);
        String json = jsonb.toJson(person);

        System.out.println(json);
    }
}

위 코드에서는 Jsonb 객체를 Guice에서 가져온 후, toJson() 메소드를 사용하여 Person 객체를 JSON 문자열로 변환합니다.

또한, JSON 문자열을 자바 객체로 역직렬화하려면 다음과 같이 Guice를 사용합니다.

import com.google.inject.Guice;
import javax.json.bind.Jsonb;

public class Main {

    public static void main(String[] args) {
        Jsonb jsonb = Guice.createInjector(new JsonSerializationModule())
                .getInstance(Jsonb.class);

        String json = "{\"name\":\"John Doe\",\"age\":25}";
        Person person = jsonb.fromJson(json, Person.class);

        System.out.println(person.getName());
        System.out.println(person.getAge());
    }
}

위 코드에서는 fromJson() 메소드를 사용하여 JSON 문자열을 Person 객체로 변환합니다.

결론

Guice를 사용하여 JSON 직렬화/역직렬화를 구현할 수 있습니다. Guice를 사용하면 의존성 주입을 통해 코드의 유연성과 테스트 용이성을 높일 수 있습니다. Guice와 JSON 직렬화/역직렬화에 대한 더 자세한 내용은 아래 링크를 참고하세요.