Gson
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
Gson은 구글에서 개발한 자바 라이브러리로, 자바 객체를 JSON(JavaScript Object Notation) 형식으로 직렬화하거나 JSON 문자열을 자바 객체로 역직렬화하는 데 사용된다. 2008년 5월에 버전 1.0이 출시되었으며, 최신 버전은 2024년 5월 20일에 출시된 2.11이다. Gson은 컬렉션, 제네릭 타입, 중첩 클래스를 지원하며, 사용자 정의 직렬화기 및 역직렬화기를 통해 유연성을 제공한다.
더 읽어볼만한 페이지
- JSON - JSON 웹 토큰
JSON 웹 토큰(JWT)은 헤더, 페이로드, 서명으로 구성되어 정보를 안전하게 전송하는 개방형 표준으로, 사용자 인증 및 권한 부여에 주로 사용되지만 알고리즘 관련 취약점, 키 관리, 토큰 무효화 등의 문제점도 존재한다. - JSON - JSON-LD
JSON-LD는 JSON 데이터를 RDF 모델로 표현하는 직렬화 방법으로, 컨텍스트를 활용해 JSON 속성을 온톨로지 개념에 연결하며 SEO, 의료 정보학, IoT 등 다양한 분야에서 활용되고 Schema.org, 구글 지식 그래프 등에서 중요한 역할을 한다. - 자바 라이브러리 - 아파치 루씬
아파치 루씬은 더그 커팅이 개발한 오픈 소스 전문 검색 라이브러리이며, 텍스트 색인 및 검색 기능을 제공하여 웹 검색 엔진, 퍼지 검색, 추천 시스템 구현 등에 사용된다. - 자바 라이브러리 - 구글 구아바
구글 구아바는 구글에서 개발한 오픈 소스 자바 라이브러리로, 자바 컬렉션 프레임워크 확장, 캐싱, I/O, 문자열 처리 등 다양한 유틸리티 기능 제공, 함수형 프로그래밍 스타일 컬렉션 적용을 통해 자바 개발 생산성 향상에 기여한다. - 구글의 소프트웨어 - 구글 어시스턴트
구글 어시스턴트는 2016년 구글에서 개발한 인공지능 음성 비서 서비스로, 양방향 대화 지원, 다양한 기기 및 플랫폼 확장성, 인터넷 검색, 일정 관리, 홈 오토메이션 제어 등의 기능을 제공하지만 개인정보 보호 문제에 대한 비판도 존재한다. - 구글의 소프트웨어 - 제미니 (챗봇)
구글이 개발한 대화형 인공지능 챗봇 제미니는 챗GPT에 대응하기 위해 개발되었으며, LaMDA에서 PaLM 2를 거쳐 자체 개발한 제미니 모델로 업그레이드되었고, 현재 구글 서비스와 통합되어 정보를 제공하지만 편향성 논란도 있다.
| Gson - [IT 관련 정보]에 관한 문서 | |
|---|---|
| 기본 정보 | |
| 개발자 | 구글 |
| 최초 릴리스 날짜 | 2008년 5월 22일 |
| 최신 버전 | 2.8.5 |
| 최신 릴리스 날짜 | 2018년 5월 21일 |
| 프로그래밍 언어 | 자바 |
| 운영 체제 | 크로스 플랫폼 |
| 라이선스 | 아파치 라이선스 2.0 |
| 웹사이트 | https://github.com/google/gson |
2. 역사
Gson 라이브러리는 원래 구글의 내부 목적을 위해 개발되었으며, 2008년 5월 22일에 아파치 라이선스 2.0 조건 하에 버전 1.0이 출시되었다. 최신 버전은 2024년 5월 20일에 출시된 2.11이다.
2. 1. 버전 역사
| 버전 | 출시일 |
|---|---|
| 2.8.5 | 2018년 5월 21일 |
| 2.8.4 | 2018년 5월 1일 |
| 2.8.3 | 2018년 4월 27일 |
| 2.8.2 | 2017년 9월 19일 |
| 2.8.1 | 2017년 5월 30일 |
| 2.8.0 | 2016년 10월 27일 |
| 2.7 | 2016년 6월 14일 |
| 2.6.2 | 2016년 2월 26일 |
| 2.6.1 | 2016년 2월 11일 |
| 2.6 | 2016년 2월 11일 |
| 2.5 | 2015년 11월 24일 |
| 2.4 | 2015년 10월 4일 |
| 2.3.1 | 2014년 11월 20일 |
| 2.3 | 2014년 8월 11일 |
| 2.2.4 | 2013년 5월 13일 |
| 2.2.3 | 2013년 4월 12일 |
| 2.2.2 | 2012년 7월 2일 |
| 2.2.1 | 2012년 5월 5일 |
| 2.2 | 2012년 5월 5일 |
| 2.1 | 2011년 12월 31일 |
| 2.0 | 2011년 11월 13일 |
| 1.7.1 | 2011년 4월 13일 |
| 1.7 | 2011년 4월 12일 |
| 1.6 | 2010년 11월 24일 |
| 1.5 | 2010년 8월 19일 |
| 1.4 | 2009년 10월 9일 |
| 1.3 | 2009년 4월 1일 |
| 1.3 베타 | 2009년 1월 12일 |
| 1.2 | 2008년 8월 29일 |
| 1.1.1 | 2008년 7월 18일 |
| 1.1 | 2008년 7월 1일 |
| 1.0.1 | 2008년 6월 17일 |
| 1.0 | 2008년 5월 22일 |
Gson은 반영을 사용하여 객체를 JSON 형식으로 직렬화 및 역직렬화하므로, 별도의 추가적인 수정 없이도 간편하게 JSON 형식으로 변환할 수 있다. 기본적으로 클래스에 인수가 없는(no-args) 기본 생성자만 있으면 되지만, 필요한 경우 기능 문단을 참조하여 이 제약 조건을 우회할 수 있다.
Gson 라이브러리는 원래 구글의 내부 목적으로 개발되었으며, 2008년 5월 22일에 아파치 라이선스 2.0 조건으로 버전 1.0이 출시되었다.
3. 사용법
Gson의 사용법은 #기본 사용 예제, 직렬화, 역직렬화 그리고 #Java 플랫폼 모듈 시스템과의 사용 섹션에서 확인할 수 있다. 더 자세한 예제는 [https://github.com/google/gson Gson GitHub 저장소]에서 사용 설명서를 참조할 수 있다.
3. 1. 기본 사용 예제
Gson은 반영을 사용하여 객체를 JSON 형식으로 직렬화 및 역직렬화하므로, 별도의 추가적인 수정 없이도 간편하게 JSON 형식으로 변환할 수 있다. 기본적으로 클래스에 인수가 없는(no-args) 기본 생성자만 있으면 되지만, 필요한 경우 [#기능|기능] 문단을 참조하여 이 제약 조건을 우회할 수 있다.
다음은 샘플 객체를 직렬화하고 역직렬화할 때 Gson의 기본적인 사용법을 보여주는 예제이다.
먼저, `Car` 클래스와 `Person` 클래스를 정의한다.
```java
package example;
public class Car {
public String manufacturer;
public String model;
public double capacity;
public boolean accident;
public Car() {
}
public Car(String manufacturer, String model, double capacity, boolean accident) {
this.manufacturer = manufacturer;
this.model = model;
this.capacity = capacity;
this.accident = accident;
}
@Override
public String toString() {
return ("제조사: " + manufacturer + ", " + "모델: " + model + ", " + "용량: " + capacity + ", " + "사고: " + accident);
}
}
```
```java
package example;
public class Person {
public String name;
public String surname;
public Car[] cars;
public int phone;
public transient int age;
public Person() {
}
public Person(String name, String surname, int phone, int age, Car[] cars) {
this.name = name;
this.surname = surname;
this.cars = cars;
this.phone = phone;
this.age = age;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("이름: ").append(name).append(" ").append(surname).append("\n");
sb.append("전화번호: ").append(phone).append("\n");
sb.append("나이: ").append(age).append("\n");
int i = 0;
for (Car car : cars) {
i++;
sb.append("자동차 ").append(i).append(": ").append(car).append("\n");
}
return sb.toString();
}
}
```
Gson을 이용한 직렬화 및 역직렬화 예시는 각각 직렬화 및 역직렬화 하위 섹션에 설명되어 있다.
3. 1. 1. 직렬화
Gson은 반영을 사용하므로 (역)직렬화된 오브젝트의 클래스에 대한 추가적인 수정이 필요하지 않다. 클래스에 no-args 기본 생성자만 있으면 된다. (단, 기능 문단 참고)
다음은 샘플 오브젝트를 직렬화할 때 가장 기초적인 Gson 사용법을 나타낸 예제이다:
```java
package Main;
import Car.Car;
import Person.Person;
import com.google.gson.Gson;
public class Main {
public static void main(String[] args) {
Gson gson = new Gson();
Car audi = new Car("Audi", "A4", 1.8, false);
Car skoda = new Car("Škoda", "Octavia", 2.0, true);
Car[] cars = {audi, skoda};
Person johnDoe = new Person("John", "Doe", 2025550191, 35, cars);
System.out.println(gson.toJson(johnDoe));
}
}
```
위 코드를 실행하면 다음과 같은 JSON 출력을 얻는다.
```json
{
"name":"John",
"surname":"Doe",
"cars":[
{
"manufacturer":"Audi",
"model":"A4",
"capacity":1.8,
"accident":false
},
{
"manufacturer":"Škoda",
"model":"Octavia",
"capacity":2.0,
"accident":true
}
],
"phone":2025550191
}
```
Person 클래스에서 "age" 필드는 `transient`로 표시되어 있으므로 출력에 포함되지 않는다.
3. 1. 2. 역직렬화
Gson은 반영을 사용하므로 (역)직렬화된 오브젝트의 클래스에 대한 추가적인 수정이 필요하지 않다. 기본적으로 클래스에 no-args 기본 생성자만 있으면 된다.
다음은 마지막 예제에서 만든 출력을 역직렬화하는 코드이다:
```java
package Main;
import Person.Person;
import com.google.gson.Gson;
public class Main {
public static void main(String[] args) {
Gson gson = new Gson();
String json = "{\"name\":\"John\",\"surname\":\"Doe\",\"cars\":[{\"manufacturer\":\"Audi\",\"model\":\"A4\"," +
"\"capacity\":1.8,\"accident\":false},{\"manufacturer\":\"Škoda\",\"model\":\"Octavia\",\"capacity\"" +
":2.0,\"accident\":true}],\"phone\":2025550191}";
Person johnDoe = gson.fromJson(json, Person.class);
System.out.println(johnDoe.toString());
}
}
```
위 코드를 실행하면 다음과 같은 출력이 만들어진다:
```text
이름: John Doe
전화번호: 2025550191
나이: 0
자동차 1: 제조사: Audi, 모델: A4, 용량: 1.8, 사고: false
자동차 2: 제조사: Škoda, 모델: Octavia, 용량: 2.0, 사고: true
3. 2. Java 플랫폼 모듈 시스템과의 사용
Gson은 Java 플랫폼 모듈 시스템과 함께 사용될 수 있다. 이를 위해서는 `module-info.java` 파일에 다음과 같은 설정을 추가해야 한다.
```java
module GsonExample {
requires com.google.gson;
// 예제에서 선언된 패키지를 열어 Gson이 패키지 내의 클래스에 대한 리플렉션을 사용하도록 허용합니다.
// (또한 비공개 필드에 액세스)
opens example to com.google.gson;
}
```
위 설정은 `GsonExample` 모듈이 `com.google.gson` 모듈에 의존하고, `example` 패키지를 `com.google.gson` 모듈에 개방하여 Gson이 리플렉션을 통해 `example` 패키지 내 클래스에 접근할 수 있도록 허용한다. 이를 통해 Gson은 비공개 필드를 포함한 클래스의 모든 필드에 접근하여 직렬화 및 역직렬화를 수행할 수 있다.
4. 기능
Gson은 다음과 같은 기능을 제공한다.
- 컬렉션, 제네릭 타입 및 중첩 클래스(내부 클래스 포함. 단, 기본 설정으로는 불가능)를 처리할 수 있다.
- 직렬화 시 Gson은 역직렬화되는 객체의 타입 트리를 탐색하여 JSON 입력에 있는 추가 필드를 무시한다.
- 사용자는 사용자 지정 직렬 변환기 및/또는 역직렬 변환기를 작성하여 전체 프로세스를 제어하고 소스 코드에 접근할 수 없는 클래스의 인스턴스를 역직렬화할 수 있다.
- 사용자는 InstanceCreator를 작성하여 정의된 매개변수 없는 생성자가 없는 클래스의 인스턴스를 역직렬화할 수 있다.
- Gson은 다음과 같이 사용자 정의가 가능하다.
- 콤팩트/프리티 출력
- 널(null) 객체 필드의 관리 방법 (기본적으로 출력에 표시되지 않음)
- (역)직렬화에서 제외되어야 하는 필드의 규칙
- 자바 필드 이름 변환 방법
참조
[1]
웹사이트
GSON - Gson
http://tutorials.jen[...]
2023-12-28
[2]
간행물
Gson
https://github.com/g[...]
Google
2023-12-28
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com