JSON에 대한 전반적인 개념
1. JSON 탄생 배경
JSON(JavaScript Object Notation)은 데이터 교환을 위해 만들어진 포맷입니다. 여러분이 만일 어떤 객체 내용을 네트워크를 통해 다른 프로그램에게 전송한다고 생각해 보세요. 여기서는 일종의 메신저 혹은 채팅 프로그램에서 쓰는 하나의 메시지라고 간주해봅시다. 다음 객체를 어떻게 보낼 수 있을까요?
const message = {
sender: "김코딩",
receiver: "박해커",
message: "해커야 오늘 저녁 같이 먹을래?",
createdAt: "2021-01-12 10:10:10"
}
객체라는 것이 전송 가능(transferable)하려면 애초에 수신자(reciever), 발신자(sender) 모두가 같은 프로그램을 쓰거나, 아니면 문자열과 같이 범용적으로 읽을 수 있는 형태여야만 할 것입니다.
→ message.toString() 메소드나, String(message)를 시도해보았지만, 리턴되는 것은 그저 [object Object]로 전송
→ 객체는 타입 변환을 이용해 String으로 변환할 경우 객체 내용을 포함하지 않습니다.
→ 객체를 문자열로 변환하는 JSON.stringify 함수를 이용한다.
let transferableMessage = JSON.stringify(message)
console.log(transferableMessage)
// `{"sender":"김코딩","receiver":"박해커","message":"해커야 오늘 저녁 같이 먹을래?","createdAt":"2021-01-12 10:10:10"}`
→ stringify하는 이 과정을 직렬화(serialize)한다고 합니다.
→ 수신자는 문자열로 변환된 객체를 다시 객체로 만들기 위해 JSON.stringify와 반대의 일을 하는 JSON.parse를 이용한다.
let packet = `{"sender":"김코딩","receiver":"박해커","message":"해커야 오늘 저녁 같이 먹을래?","createdAt":"2021-01-12 10:10:10"}`
let obj = JSON.parse(packet)
console.log(obj)
/*
{
sender: "김코딩",
receiver: "박해커",
message: "해커야 오늘 저녁 같이 먹을래?",
createdAt: "2021-01-12 10:10:10"
}
*/
→ JSON은 서로 다른 프로그램 사이에서 데이터를 교환하기 위한 포맷이며 자바스크립트에서만 쓰이는 것이 아닌, 여타 다른 언어에서도 범용적으로 쓰이는 아주 유명한 포맷
2. JSON 규칙
→ JSON을 얼핏 보기에 자바스크립트의 객체와 별반 다를 바가 없어 보이지만, 자바스크립트의 객체와는 미묘하게 다른 규칙이 있습니다.
자바스크립트 객체 | JSON | |
키 | 키는 따옴표 없이 쓸 수 있음 | 반드시 쌍따옴표를 붙여야 함 |
문자열 값 | 문자열 값은 어떠한 형태의 따옴표도 사용 가능 | 반드시 쌍따옴표를 붙여야 함 |
→ JSON은 키와 값 사이, 그리고 키-값 쌍 사이에는 공백이 있어서는 안됩니다.
----------------------------------------------------------------------------------------------------------------
→ 배열이 있을 때 literal templet을 사용하면 안에 있는 요소만 문자열로 가져올 수 있음
→ `${배열명}`
ex) let arr = [1, 2, 3];
`${arr}` ⇒ “1,2,3” (배열 내 요소만 가져와서 문자열 형태로 변환된다)
`[${arr}]` ⇒ “[1, 2, 3]” (‘[‘ , ‘]’를 추가해야지만 []형태의 문자열로 변환된다)
→ 재귀함수 : 함수 내에서 본인 함수를 호출하는 것!!!!!
ex) function rec(param1,..) {
do…
rec(param2,...); // 함수 내에서 본인 함수 호출하는 행위!!!
}
[추가사항]
아래 키워드는 재귀함수를 더 효율적이고 멋지게 쓸 수 있는 방법에 대한 키워드입니다.
- 재귀 함수와 메모리 사용량 간의 관계 (javascript recursion memory leak)
- 꼬리 재귀 (tail recursion in js)
- 하노이의 탑 재귀 (js tower of hanoi in recursion)
- 조합 재귀함수 (js combination in recursion)