Node.js는 크롬 V8 엔진으로 빌드 된 비동기 이벤트 기반 자바 스크립트 런타임이다.
이를 다시 말하면 Node.js는 자바스크립트를 브라우저 환경이 아닌 다른 환경에서 사용
할 수 있도록 실행시켜 주는 별도의 실행 환경이다.
Node.js는 자바스크립트를 사용해 확장 가능한 웹 애플리케이션(특히 서버 사이드)을
개발할 수 있도록 설계되었으며 논블로킹(Non-blocking) I/O와 단일 스레드 이벤트 루
프를 통해 성능이 매우 뛰어나다. 또한 내장 HTTP 서버 라이브러리를 포함하고 있어서
별도의 웹 서버 없이 HTTP 서비스를 할 수 있다.
오늘날 페이팔, 넷플릭스, 우버, 링크드인, 나사, 네이버 등을 비롯한 많은 기업에서 상
용 서비스에 Node.js를 사용하고 있다.
전개구문(Spread Syntax)은 말 그대로 "값을 펼쳐 주는" 구문으로 배열과 같이 값이 여러 개인 자료를 함수의 매개 변수로 한꺼번에 넘기거나 배열을 하나로 합칠 수도 있는데 이렇게 여러 개로 이루어진 자료를 한 번에 적용할 때 유용하다.
<script>
const l = [1, 2, 3]
console.log(...l)
const l2 = [9, 8, ...l];
console.log(l2);
// 함수 호출에서 매개 변수로 배열 전개 - apply() 함수 대체
function myFunc(x, y, z) {
return x + y + z;
}
const nums = [10, 20, 30]
console.log(myFunc.apply(null, nums));
console.log(myFunc(...nums));
// 객체 리터럴 전개 - ECMAScript 2018에서 추가
let obj = {
name: '홍길동',
age: 20,
grade: 4
}
let objClone = { ...obj }
console.log(objClone);
// 생성자 함수 호출에서 배열 전개
let dateArr = [1970, 9, 21];
const d1 = new Date(dateArr);
console.log(d1);
</script>
<script>
// 배열 구조 분해 할당
const members = ["홍길동", "임꺽정", "캡틴", "어벤저스"]
// 기존의 index를 이용한 배열 요소 접근 - 요소가 많다면 코드는?
//let hong = member[0];
//let leem = member[1];
// 왼쪽에 변수를 오른쪽에 분해할 자료를 지정
let [hong, leem] = members;
console.log(hong, leem);
let [h1="hong", , captain, avengers] = members;
console.log(h1, captain, avengers);
// 나머지 변수(Rest Variable)를 이용해 구조 분해 할당
let[h2, ...mems] = members;
console.log(h2, mems);
// 구조 분해 할당을 이용해 변수 값 교환하기
let x = 10, y = 20;
[y, x] = [x, y]
console.log(x, y);
</script>
<script>
// 객체의 구조 분해 할당
const member = { name: '홍길동', age: 24 }
// memeber 객체에서 프로퍼티 값을 분해해서 name과 age 변수에 할당
let { name, age } = member;
console.log(name, age);
// 프로퍼티 이름에 새로운 변수 이름 사용
let { name: userName, age: userAge } = member;
console.log(userName, userAge);
const student = {
sName: '어머나',
score : {
math: 85,
korean: 87
},
hobby: ["독서", "영화감상"]
}
// 객체의 프로퍼티가 없으며 값은 undefined 이며 이 때는 기본 값이 적용됨
let {
sName,
grade = 3,
score: { math, history = 70 },
hobby: [h1]
} = student;
console.log(sName, grade, math, history, h1);
</script>
<script>
// 함수의 매개변수로 전달된 객체의 구조 분해 할당
// 기본 값을 가지는 매개변수를 가진 함수 정의
function showMember(name='이름 없음', age=20, hobby=["독서"]) {
console.log(`이름 : ${name}, 나이 : ${age}, 취미 : ${[hobby[0], hobby[1], hobby[2]]}`);
}
// 인수를 모두 지정하면 기본 값은 사용되지 않고 인수가 없으면 매개변수는 모두 기본 값으로 설정됨
showMember("홍길동", 23, ["여행", "게임"]);
showMember();
// 인수의 순서가 잘 못 지정될 수 있거나 특정 값만 지정하려면 undefined를 사용해 위치를 맞춰야 함
showMember("홍길동", ["여행", "게임"], 23);
showMember(undefined, 30);
// 함수의 매개변수로 객체를 전달하고 함수에서 객체를 구조 분해해서 변수에 할당
function showMember1({name='이름 없음', age=20, hobby=["독서"]}) {
console.log(`이름 : ${name}, 나이 : ${age}, 취미 : ${[hobby[0], hobby[1]]}`);
}
// 인수의 순서가 바뀌거나, 누락되어도 객체의 프로퍼티를 사용하므로 매개변수에 잘 전달됨
showMember1({name: "강감찬", hobby: ["수영", "스키"]});
showMember1({});
//showMember1(); // 여기서 오류
// 빈 객체인 {}를 인수 전체의 기본 값으로 설정하면 인수가 없는 호출의 오류를 해결할 수 있음
function showMember2({name='이름 없음', age=20, hobby=["독서"]} = {}) {
console.log(`이름 : ${name}, 나이 : ${age}, 성별 : ${[hobby[0], hobby[1], hobby[2]]}`);
}
showMember2();
</script>