Gson의 확장과 커스터마이징은 JSON 직렬화 및 역직렬화 과정을 제어하고 확장 가능하도록 도와줍니다. GsonBuilder를 사용하면 기본 설정을 변경하거나 사용자 정의 동작을 추가할 수 있으며, 플러그인과 다양한 라이브러리와의 연계를 통해 더욱 강력한 기능을 구현할 수 있습니다.
GsonBuilder를 사용한 커스터마이징
GsonBuilder는 Gson 객체를 구성할 때 다양한 설정을 추가할 수 있는 강력한 도구입니다. 이를 사용하면 기본 동작을 커스터마이징하거나 특수한 요구사항에 맞게 설정할 수 있습니다.
1. 포맷팅된 출력 설정
Gson의 기본 출력은 압축된 형태입니다. setPrettyPrinting을 사용하면 보기 쉬운 포맷으로 JSON을 생성할 수 있습니다.
import com.google.gson.*;
class Product {
String name;
int price;
public Product(String name, int price) {
this.name = name;
this.price = price;
}
}
public class Main {
public static void main(String[] args) {
Product product = new Product("스마트폰", 1200000);
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.create();
String json = gson.toJson(product);
System.out.println(json);
}
}
출력 결과
{
"name": "스마트폰",
"price": 1200000
}
2. Null 값 포함 설정
기본적으로 Gson은 Null 값을 포함하지 않습니다. serializeNulls를 사용하여 Null 값을 포함할 수 있습니다.
public class Main {
public static void main(String[] args) {
Product product = new Product("노트북", 0);
Gson gson = new GsonBuilder()
.serializeNulls()
.create();
String json = gson.toJson(product);
System.out.println(json);
}
}
출력 결과
{
"name": "노트북",
"price": 0
}
3. 날짜 형식 커스터마이징
날짜 필드는 기본적으로 Epoch 형식으로 처리됩니다. setDateFormat으로 날짜 형식을 지정할 수 있습니다.
import java.util.Date;
class Order {
String productName;
Date orderDate;
public Order(String productName, Date orderDate) {
this.productName = productName;
this.orderDate = orderDate;
}
}
public class Main {
public static void main(String[] args) {
Order order = new Order("의자", new Date());
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss")
.create();
String json = gson.toJson(order);
System.out.println(json);
}
}
플러그인 및 확장 기능 소개
Gson은 TypeAdapter와 JsonSerializer/JsonDeserializer를 사용하여 데이터를 처리하는 방식을 확장할 수 있습니다.
1. Custom TypeAdapter
TypeAdapter는 특정 데이터 유형에 대한 직렬화와 역직렬화 방식을 정의합니다.
class PriceAdapter extends TypeAdapter<Integer> {
@Override
public void write(JsonWriter out, Integer value) throws IOException {
out.value(value + "원");
}
@Override
public Integer read(JsonReader in) throws IOException {
String price = in.nextString();
return Integer.parseInt(price.replace("원", ""));
}
}
public class Main {
public static void main(String[] args) {
Gson gson = new GsonBuilder()
.registerTypeAdapter(Integer.class, new PriceAdapter())
.create();
Product product = new Product("책상", 50000);
String json = gson.toJson(product);
System.out.println(json);
Product deserialized = gson.fromJson(json, Product.class);
System.out.println("가격: " + deserialized.price);
}
}
Gson과 기타 라이브러리와의 연계
Gson은 다른 라이브러리와 결합하여 기능을 확장할 수 있습니다. 대표적으로 Spring Boot, Retrofit과 같은 라이브러리와 연계해 유용한 결과를 얻을 수 있습니다.
1. Retrofit과의 연계
Retrofit은 REST API와의 상호작용을 단순화해주는 라이브러리입니다. Gson을 JSON 변환 라이브러리로 사용할 수 있습니다.
import retrofit2.*;
import retrofit2.converter.gson.GsonConverterFactory;
import java.util.List;
class User {
String name;
String city;
}
interface UserService {
@GET("/users")
Call<List<User>> getUsers();
}
public class Main {
public static void main(String[] args) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.example.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
UserService service = retrofit.create(UserService.class);
try {
Response<List<User>> response = service.getUsers().execute();
response.body().forEach(user -> System.out.println(user.name + " - " + user.city));
} catch (Exception e) {
e.printStackTrace();
}
}
}
참고사이트
- Gson 공식 문서: https://github.com/google/gson
- Retrofit 공식 문서: https://square.github.io/retrofit/
'JAVA' 카테고리의 다른 글
[JAVA] Gson과 최신 Java 기능 연계 (0) | 2024.12.15 |
---|---|
[JAVA] Gson 자주 발생하는 문제와 해결법 (0) | 2024.12.15 |
[JAVA] 실전 프로젝트에서의 Gson 활용 (0) | 2024.12.15 |
[JAVA] Gson과 REST API (0) | 2024.12.15 |
[JAVA] Gson의 제한사항과 문제 해결 (0) | 2024.12.14 |
[JAVA] Gson을 활용한 성능 최적화 (0) | 2024.12.14 |
[JAVA] Gson과 JSON 파싱 (0) | 2024.12.14 |
[JAVA] Gson과 날짜/시간 처리 (0) | 2024.12.14 |