[JAVA] JSON 변환의 핵심 원리

윤하빈·2026년 4월 16일

개발 공부

목록 보기
6/12

1. 왜 바로 JSON으로 못 바꿀까?

예를 들어, 아래 코드에서 볼 수 있듯이 WiseSaying 같은 커스텀 객체는 자바만 이해하는 복잡한 구조임. 하지만 JSON은 단순한 문자열 데이터임. Util.json.toString() 메서드는 모든 객체의 내부 구조를 다 알 수 없기 때문에, 데이터가 규격화된 Map만 받도록 설계되었음.

WiseSaying ws = new WiseSaying("명언", "작가");
Util.json.toString(ws);  // 에러가 발생함.

2. 변환 프로세스: 객체 → Map → JSON

따라서 직접적인 변환이 불가능하므로, 중간에 데이터를 '키-값' 쌍으로 펼쳐주는 단계가 필요함.

  • 1단계 (WiseSaying → Map): 객체의 필드값들을 추출해서 Map에 담음.
    Map<String, Object> map = new LinkedHashMap<>();
    map.put("id", 1);
    map.put("content", "명언");
    map.put("author", "작가");
  • 2단계 (Map → JSON): 규격화된 Map을 JSON 문자열로 변환함.
    String json = Util.json.toString(map);

Map으로 변환해야 하는 이유? JSON의 { "key": "value" } 구조와 Map의 { key=value } 구조가 적절하게 대응되기 때문임.


3. 왜 Map<String, Object> 인가?

데이터를 담는 Map을 정의할 때 타입을 지정해야 함. 왜 키는 String이고, 값은 Object일까?

① Key가 String인 이유: JSON 때문에

JSON의 모든 Key는 항상 쌍따옴표("")로 감싸진 문자열임. 따라서 자바의 Map에서도 Key는 String으로 고정함.

② Value가 Object인 이유: 다양한 타입 수용

JSON의 값(Value)에는 숫자, 문자열, 불리언 등 다양한 타입이 올 수 있음.

  • Integer만 받으면? 문자열 데이터를 못 넣음.
  • String만 받으면? 숫자 데이터를 못 넣음.

이때 해결책이 Object임. 왜냐하면 자바에서 모든 클래스의 조상은 Object이므로, 어떤 타입의 데이터든 다 받아낼 수 있게 됨.

Map<String, Object> map = new LinkedHashMap<>();
map.put("id", 1);           
map.put("content", "명언");  
map.put("isPublic", true);  

핵심 요약

  1. Map: 객체를 직접 JSON으로 바꿀 수 없으므로 표준 구조인 Map을 거쳐야 함.
  2. 데이터의 규격화: WiseSaying → Map → JSON 순서로 데이터가 흐름.
  3. 타입의 조상: Object를 사용해야 자바의 모든 타입을 하나의 Map에 담을 수 있음.

결국, 복잡한 객체를 '키-값' 형태로 분해하는 과정이 중요함.


1개의 댓글

comment-user-thumbnail
2026년 4월 17일

👍짱짱맨👍

답글 달기