맨위로가기

Gson

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의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.52018년 5월 21일
2.8.42018년 5월 1일
2.8.32018년 4월 27일
2.8.22017년 9월 19일
2.8.12017년 5월 30일
2.8.02016년 10월 27일
2.72016년 6월 14일
2.6.22016년 2월 26일
2.6.12016년 2월 11일
2.62016년 2월 11일
2.52015년 11월 24일
2.42015년 10월 4일
2.3.12014년 11월 20일
2.32014년 8월 11일
2.2.42013년 5월 13일
2.2.32013년 4월 12일
2.2.22012년 7월 2일
2.2.12012년 5월 5일
2.22012년 5월 5일
2.12011년 12월 31일
2.02011년 11월 13일
1.7.12011년 4월 13일
1.72011년 4월 12일
1.62010년 11월 24일
1.52010년 8월 19일
1.42009년 10월 9일
1.32009년 4월 1일
1.3 베타2009년 1월 12일
1.22008년 8월 29일
1.1.12008년 7월 18일
1.12008년 7월 1일
1.0.12008년 6월 17일
1.02008년 5월 22일



Gson 라이브러리는 원래 구글의 내부 목적으로 개발되었으며, 2008년 5월 22일에 아파치 라이선스 2.0 조건으로 버전 1.0이 출시되었다.

3. 사용법

Gson은 반영을 사용하여 객체를 JSON 형식으로 직렬화 및 역직렬화하므로, 별도의 추가적인 수정 없이도 간편하게 JSON 형식으로 변환할 수 있다. 기본적으로 클래스에 인수가 없는(no-args) 기본 생성자만 있으면 되지만, 필요한 경우 기능 문단을 참조하여 이 제약 조건을 우회할 수 있다.

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