240613 node.js

PangE·2024년 6월 14일

교안 1~15

Node.js

Node.js는 크롬 V8 엔진으로 빌드 된 비동기 이벤트 기반 자바 스크립트 런타임이다.
이를 다시 말하면 Node.js는 자바스크립트를 브라우저 환경이 아닌 다른 환경에서 사용
할 수 있도록 실행시켜 주는 별도의 실행 환경이다.

Node.js는 자바스크립트를 사용해 확장 가능한 웹 애플리케이션(특히 서버 사이드)을
개발할 수 있도록 설계되었으며 논블로킹(Non-blocking) I/O와 단일 스레드 이벤트 루
프를 통해 성능이 매우 뛰어나다. 또한 내장 HTTP 서버 라이브러리를 포함하고 있어서
별도의 웹 서버 없이 HTTP 서비스를 할 수 있다.
오늘날 페이팔, 넷플릭스, 우버, 링크드인, 나사, 네이버 등을 비롯한 많은 기업에서 상
용 서비스에 Node.js를 사용하고 있다.

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>

0개의 댓글