본문 바로가기
학습/Java

ObjectMapper

코동이 2021. 8. 6.

ObjectMapper란?

 

JSON 형식을 사용할 때, 응답들을 직렬화하고 요청들을 역직렬화 할 때 사용하는 기술이다.

 

(*여기서 다소 생소한 JSON 형식, 직렬화, 역직렬화를 잠깐 살펴본다.)

 

JSON(Javascript Object Notation)

 "키 :값" 쌍으로 이루어진 데이터 객체를 전달하기 위해 사람이 읽을 수 있는 텍스트를 사용하는 포맷이다. 본래는 자바스크립트 언어로부터 파생되어 자바스크립트 구문 형식을 따르지만 플랫폼과 언어 독립형 데이터 형식이다. 따라서 프로그래밍언어나 플랫폼에 독립적이므로 C, 자바, 파이썬 등에서 JSON 데이터 생성을 위한 코드를 각자 가지고 있다. JS를 제외한 언어는 라이브러리를 사용해야하는 경우가 많다

 

직렬화 (Serialize)

데이터를 전송하거나 저장할 때 바이트 문자열이어야 하기 때문에 객체들을 문자열로 바꾸어 주는 것

- Object -> String 문자열

 

역직렬화(Deserialize)

데이터가 모두 전송된 이후, 수신측에서 다시 문자열을 기존의 객체로 회복시켜주는 것

- String 문자열 -> Object

 

스프링 부트의 경우, spring-boot-starter-web에 기본적으로 Jackson 라이브러리가 있어서 Object <->JSON 간 변환은 자동으로 처리된다. (Jackson 라이브러리란 자바에서 고수준의 JSON 처리기이다.)

 

@RestController 의 경우, 요청과 응답이 내부적으로 직렬화/역직렬화가 되는데 이는 Jackson 라이브러리가 있기 때문이다. 

 

ObjectMapper 사용법

 

기존에 다음의 클래스가 있다고 가정한다. 객체로 만들 클래스에서 getter와 default 생성자 생성을 꼭 확인한다.

@Getter // Object -> String 문자열로 바꿀 때 필요!
class Car {
 private String name;
 private String color;
 
 public Car(String name, String color) {
  this.name = name;
  this.color = color;
 }
 
 public Car() { // String 문자열 => Object로 바꿀 때 필요!
  this.name = null;
  this.color = null;
 } 
}

 

1. Object => String 문자열

ObjectMapper mapper = new ObjectMapper();
Car car = new Car("K5", "gray");

String text = mapper.WriteValueAsString(car); //{"name":"K5","color":"gray"}

 

2. String 문자열 => Object

Car carObject = mapper.readValue(text, Car.class); //Car{name='k5',color='gary'}

 

*주의 Car 클래스에서 내가 만드는 메서드나 생성자 이름에 get이라는 단어가 들어가지 않도록 한다!!!

 

 

반응형

'학습 > Java' 카테고리의 다른 글

Spring MVC  (0) 2021.08.08
IoC, DI  (0) 2021.08.08
HTTP vs. WWW  (0) 2021.08.05
프록시 패턴  (0) 2021.08.03
GET과 Query Parameter, POST와 Databody  (0) 2021.08.03