💡 서버와 통신할 수 있는 Ajax, JSON에 대해서 공부해보자
XMLHttpRequest Object
<- browser api에서 제공하는 오브젝트 중 하나, 이 오브젝트를 사용하면 간단하게 서버에게 데이터를 요청하고 받아올 수 있다.fetch API
를 이용하면 간편하게 데이터를 주고 받을 수 있음fetch API
를 사용해도 되고 XMLHttpRequest
라는 오브젝트를 써서 서버와 통신할 수 있다.JavaScript Object Notation
JSON 파일을 보면 JS의 오브젝트의 형식과 똑같이 key-value 형식으로 이루어져있음
브라우저 뿐만이 아니라 모바일에서 데이터를 주고 받을 때 or 서버와 통신하지 않아도 오브젝트를 파일 시스템에 저장할 때도 JSON 데이터 타입을 많이 사용한다.
프로그래밍 언어와 플랫폼에 상관없이 쓸 수 있는게 큰 장점 -> 모든 언어들이 json으로 serialization된 오브젝트를 다시 그 언어의 특징에 맞게 오브젝트로 변경하고, 오브젝트를 다시 json으로 serialization하는 것을 지원을 해주거나, 아님 외부 라이브러리를 통해서 이런 것들이 다 가능하다.
토끼 오브젝트를 key-value의 스트링 타입으로 변환해서 서버에 전송하게 되고, 서버에서 다시 받아올 때도 스트링 타입으로 받아와서 토끼라는 오브젝트로 변환해서 브라우저에 표기하게 되는 것
: Object to JSON
let json = JSON.stringify(true);
console.log(json); // true
json = JSON.stringify(['apple', 'banna']);
console.log(json); // ["apple","banna"]
""
가 json의 규격 사항이다.const rabbit = {
name: 'tori',
color: 'white',
size: null,
birthDate: new Date(),
symbol: Symbol('id'),
jump: () => {console.log(`${name} can jump!`);},
}
json = JSON.stringify(rabbit);
console.log(json);
birthDate
를 보면 Date라는 오브젝트가 String으로 변환되어서 JSON으로 만들어진 것을 확인해볼 수 있다.jump
함수는 JSON에 포함이 되지 않는다. -> 함수는 오브젝트에 있는 데이터가 아니여서 제외된다. Symbol
같은 JS에만 있는 특별한 데이터도 JSON에 포함되지 않는다.json = JSON.stringify(rabbit, ['name', 'size']);
console.log(json);
// {"name":"tori","size":null}
json = JSON.stringify(rabbit, (key, value) => {
console.log(`key: ${key}, value: ${value}`);
return value;
});
console.log(json);
json = JSON.stringify(rabbit, (key, value) => {
console.log(`key: ${key}, value: ${value}`);
return key === 'name'? 'ellie' : value;
});
console.log(json);
json = JSON.stringify(rabbit);
const obj = JSON.parse(json);
console.log(obj);
rabbit.jump();
obj.jump();
rabbit
이라는 오브젝트에는 jump()
가 있지만obj
는 serialization된... 즉, string으로 만들어진 json으로 부터 다시 오브젝트를 만든 것이기 때문에 함수는 serialization될 때 포함되지 않았어서 다시 json으로 부터 오브젝트를 만든 것에는 jump
라는 api가 없다console.log(rabbit.birthDate.getDate());
console.log(obj.birthDate.getDate());
console.log(typeof obj.birthDate); // string
birthDate
라는 오브젝트가 있었는데 이것은 date라는 오브젝트이다. 그래서 getDate
라는 date안에 존재하는 api를 쓸 수 있다.birthDate
를 출력하면 에러가 발생한다 -> birthDate
는 string이기 때문이다.const obj = JSON.parse(json, (key, value) => {
console.log(`key: ${key}, value: ${value}`);
return key === 'birthDate' ? new Date(value) : value;
});
console.log(rabbit.birthDate.getDate());
console.log(obj.birthDate.getDate());
console.log(typeof obj.birthDate); // object
➕ 추가로 공부할 것
1. 오버로딩 이란?