어제 재귀 공부를 하면서 조금은 깨우친 것 같아서
조금 다행이었다. 너무 전부다 이해해야한다는
압박감이 조금 있는 것 같은데 그런 부담감을 좀 덜어내고
할 수 있는 만큼 습득하며 공부하는 방향으로가야겠다.

image


어제는 재귀에대한 공부와 간단한 예제들을 풀었다.
오늘은 Json에 대해 간단히 배워 볼 것 같다.

Json

JavaScript Object Notation의 줄일말이다.
말그대로 자바스크립트 객체 표기법이란 뜻이다.
우리는 Java언어를 쓰고 화면을 표현해주는 프론트엔드의 역할에서는
JavaScript문법을 사용하니 우리는 프로그램 데이터를 주고 받을때
서로의 규약이 필요하다. 그래서 만들어진 것 같다.

image

간단한 Json 객체를 이용할 수 있게하는 Jackson 라이브러리에서 제공하는
ObjectMapper 클래스가 있다.
간단하게 알아보자.

우선 Jackson 라이브러리를 사용하려면
bulid.gradle에 의존성 주임을 해줘야한다.

implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.3'

간단한 Json 형태의 파일을 만들어주는 프로그램을 작성해보자.

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.HashMap;
import java.util.Map;

//Json의 직렬화 (Serialized)

public class SimpleJson {
    public static void main(String[] args) throws JsonProcessingException {
        Map<String, String> message = new HashMap<>(){
            put("name", "이재혁");
            put("age", "28");
            put("hobby", "코딩하기");
            put("createdAt", "2022-09-21,10:10:10");
        };

        ObjectMapper mapper  = new ObjectMapper();
        String json = mapper.writeValueAsString(message);

        System.out.println(json);

    }
}

//출력
{"createdAt":"2022-09-21,10:10:10","name":"이재혁","age":"28","hobby":"코딩하기"}

출력하게될 경우 아래와 같이
HashMap에있는 Key와 Value를 직렬화시켜준다.
ObjectMapper의 writeValueAsString이라는 메서드를 이용해 만들어줄 수 있다.
반대로 Json 데이터를
Map으로 받아올 수도 있다.

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.Map;

//Json객체 맵으로 가져오기

public class SimpleJsonToMap {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        String json = "{\"createdAt\":\"2022-09-21,10:10:10\",\"name\":\"이재혁\",\"age\":\"28\",\"hobby\":\"코딩하기\"}";

        Map<String, String> deserializedData = mapper.readValue(json, Map.class);
        System.out.println(deserializedData);
    }
}
//출력
{createdAt=2022-09-21,10:10:10, name=이재혁, age=28, hobby=코딩하기}

어디선가 온다고 가상의 json 데이터를
String 타입으로 만들어준 참조변수 json을
ObjectMapper.readValue 메서드를 이용해
데이터를 가져올 수 있다.

여기까지 보면
우리는 이미 만들어져있는 클래스의 메서드를 이용해
아주 간단하게 Json객체를 다루는법을 배웠는데
이 과정, 여러가지 데이터 타입과 구조의 배열,Map,Set,List 등이
들어왔을때 Json 객체가 없을 경우 어떻게 우리가 표현할 수 있을지?
에 대한 과제가 오늘 주된 공부 시간이였다.

여러 타입의 데이터를 ObjectMapper와 동일하게
동작하도록 문자열의 데이터를 조작하고
맞춰주는 프로그램을 작성해보자!!
과제를 공유할 수 가 없어 따로 작성해두진 않겠다.

과제에는 테스트 케이스로 Mapper와 내가 만든 클래스의 기능들을
비교하여 테스트 케이스에 통과하는 것이 과제였다.
여기서 어제 배운 재귀를 활용해 작성하는 것이 포인트였다.

Object[] example = new Object[] {1,”예제 입니다,ture};
라고 가정해 toString(); 메서드로 출력하였을 경우

[1, 예제 입니다., true]
이러한 형태로 출력되어진다.
하지만 ObjectMapper로 가져오게되면

[1,”예제 입니다.”,true]
위와 같은 형태로 출력되어진다.

다른점은 Object의 String타입의 데이터에는 ““로 감싸져있어야하며
공백도 없어야하고, 또 더나아가 Key와 Map같은 경우에도
처리방법이 다르며, Object의 배열안에 배열도 처리해야하는
여러가지 문제점들이 발견되어진다.

이러한 일을들 ObjectMapper 클래스에서 자동으로 작업해주지만
이번시간에는 이러한 동작원리를 이해하기위해서
여러가지 과제의 테스트케이스를 보면서 나만의 문제풀이도해보고
다른 사람의 풀이도보면서
아주 유익한 시간을 가졌고, Json이라는 개념이 조금
어떤 것인지 알게된? 느낌이다.

추후에 데이터를 넘겨주거나 받을때 많이 사용한다는데
더 공부해보면서 여러가지 코딩방법에 익숙해져야겠다.


오늘의 커피량: ☕️ ☕️ ☕️ ☕️ ☕️️️
오늘의 점심: 계란부침, 카레