
예를 들어, 아래 코드에서 볼 수 있듯이 WiseSaying 같은 커스텀 객체는 자바만 이해하는 복잡한 구조임. 하지만 JSON은 단순한 문자열 데이터임. Util.json.toString() 메서드는 모든 객체의 내부 구조를 다 알 수 없기 때문에, 데이터가 규격화된 Map만 받도록 설계되었음.
WiseSaying ws = new WiseSaying("명언", "작가");
Util.json.toString(ws); // 에러가 발생함.
따라서 직접적인 변환이 불가능하므로, 중간에 데이터를 '키-값' 쌍으로 펼쳐주는 단계가 필요함.
Map<String, Object> map = new LinkedHashMap<>();
map.put("id", 1);
map.put("content", "명언");
map.put("author", "작가"); String json = Util.json.toString(map);
Map으로 변환해야 하는 이유? JSON의 { "key": "value" } 구조와 Map의 { key=value } 구조가 적절하게 대응되기 때문임.
데이터를 담는 Map을 정의할 때 타입을 지정해야 함. 왜 키는 String이고, 값은 Object일까?
JSON의 모든 Key는 항상 쌍따옴표("")로 감싸진 문자열임. 따라서 자바의 Map에서도 Key는 String으로 고정함.
JSON의 값(Value)에는 숫자, 문자열, 불리언 등 다양한 타입이 올 수 있음.
이때 해결책이 Object임. 왜냐하면 자바에서 모든 클래스의 조상은 Object이므로, 어떤 타입의 데이터든 다 받아낼 수 있게 됨.
Map<String, Object> map = new LinkedHashMap<>();
map.put("id", 1);
map.put("content", "명언");
map.put("isPublic", true);
결국, 복잡한 객체를 '키-값' 형태로 분해하는 과정이 중요함.
👍짱짱맨👍