Guice는 자바의 의존성 주입(Dependency Injection) 프레임워크입니다. 이번 글에서는 Guice를 사용하여 JSON 데이터를 자바 객체로 직렬화(serialize)하고, 자바 객체를 JSON으로 역직렬화(deserialize)하는 방법에 대해 알아보겠습니다.
1. 라이브러리 추가
먼저, Guice와 JSON 직렬화/역직렬화를 위해 javax.json-api
와 org.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 직렬화/역직렬화에 대한 더 자세한 내용은 아래 링크를 참고하세요.
- Guice 공식 문서: https://github.com/google/guice
- JSON-B 공식 문서: https://javaee.github.io/jsonb-spec/