Super Kawaii Cute Cat Kaoani
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
{Extracurricular Activities}/UMC 7๊ธฐ - Node.js

[UMC 7th Server] Chapter 4. ES6์™€ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ๊ตฌ์กฐ์˜ ์ดํ•ด

by wonee1 2024. 10. 28.
728x90

 

 

 

๐ŸŽฏํ•ต์‹ฌ ํ‚ค์›Œ๋“œ ์ •๋ฆฌ


 

 

๐Ÿ”นES๋ž€?

  • ํ‘œ์ค€ํ™”๋œ ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด
  • ES๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์€ ECMA Script์˜ ์•ฝ์ž์ด๋ฉฐ, ES5๋Š” ECMA Script 5์˜ ๊ทœ๊ฒฉ์„ ๋”ฐ๋ฅธ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

๐Ÿ”นECMAScript ํŠน์ง•

  1. ํ‘œ์ค€ํ™”: ๋ธŒ๋ผ์šฐ์ €๋‚˜ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ JavaScript๊ฐ€ ์ผ๊ด€๋˜๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค.
  2. ๋ฒ„์ „ ๊ด€๋ฆฌ: ECMAScript๋Š” ์—ฌ๋Ÿฌ ๋ฒ„์ „์œผ๋กœ ๋ฐœ์ „ํ•ด ์™”์œผ๋ฉฐ, ๊ฐ€์žฅ ๋„๋ฆฌ ์•Œ๋ ค์ง„ ๋ฒ„์ „ ์ค‘ ํ•˜๋‚˜๊ฐ€ ECMAScript 6(ES6) ๋˜๋Š” ECMAScript 2015์ด๋‹ค.
  3. ์ฃผ์š” ๊ธฐ๋Šฅ: ECMAScript๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ, ์ œ์–ด ํ๋ฆ„, ํ•จ์ˆ˜, ํด๋ž˜์Šค, ๋ชจ๋“ˆํ™” ๋“ฑ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ํŠนํžˆ ES6์—์„œ๋Š” let, const, arrow function, class, modules ๋“ฑ ํ˜„๋Œ€์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ์„ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€ ๋˜์—ˆ๋‹ค.
  4. ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ: ECMAScript๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด JavaScript ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์ผ๊ด€๋˜๊ฒŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

 

ES6์˜ ์ฃผ์š” ๋ณ€ํ™” ๋ฐ ํŠน์ง•

 

 

   ES6(ECMAScript 6)๋Š” 2015๋…„์— ๋„์ž…๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ 6๋ฒˆ์งธ ํ‘œ์ค€์•ˆ

 

๐Ÿ”นES6์˜ ์ฃผ์š” ๋ณ€ํ™”

 

 1. ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹์˜ ์ฐจ์ด (var, let, const)

  • let, const ํ‚ค์›Œ๋“œ ์ถ”๊ฐ€ (๊ธฐ์กด var ํ‚ค์›Œ๋“œ์˜ ์•”์‹œ์  ์žฌํ• ๋‹น์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€)
  • var์€ ์žฌ์ •์˜์™€ ์žฌ์„ ์–ธ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • let์€ ๊ฐ€๋ณ€๋ณ€์ˆ˜๋กœ ์žฌ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์žฌ์„ ์–ธ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • const๋Š” ๋ถˆ๋ณ€๋ณ€์ˆ˜๋กœ ์žฌ์„ ์–ธ๊ณผ ์žฌ์ •์˜ ๋ชจ๋‘ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
//๋ณ€์ˆ˜ ์„ ์–ธ
var x = 2;
// ์žฌ์ •์˜
x = 4;
// ์žฌ์„ ์–ธ
var x = 4;

 

2. ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด (Template literals)

  • ๋ฐฑํ‹ฑ ์ถ”๊ฐ€${}๋ฅผ ํ†ตํ•ด ํ‘œํ˜„์‹ ์‚ฝ์ž…์ด ๊ฐ€๋Šฅ
var jsp = "์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ";

// ๊ธฐ์กด ์ฝ”๋“œ
console.log("์ด๊ฑด " + jsp + "์ž…๋‹ˆ๋‹ค.");

// ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹
console.log(`์ด๊ฑด ${jsp}์ž…๋‹ˆ๋‹ค.`);

// ์ถœ๋ ฅ ๊ฒฐ๊ณผ -> ์ด๊ฑด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.

 

 

3. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ (Arrow function)

  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ (Arrow Function) ์ถ”๊ฐ€ํ•จ์ˆ˜๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Œ.๊ธฐ์กด ํ•จ์ˆ˜์™€ this ๋ฐ”์ธ๋”ฉ์ด ๋‹ค๋ฆ„.
// ๊ธฐ๋ณธ ํ•จ์ˆ˜ ํ˜•์‹
let sum = function(a, b) {
  return a + b;
};

// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ํ˜•์‹
let sum = (a, b) => a + b;

 

 

4. ํด๋ž˜์Šค (class)

  • ES6์—์„œ๋Š” ํด๋ž˜์Šค ๊ตฌ๋ฌธ์ด ๋„์ž…๋˜์–ด ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋”์šฑ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค
  • ์ƒ์„ฑ์ž, ์ƒ์†, ๋ฉ”์„œ๋“œ, ์ •์  ๋ฉ”์„œ๋“œ ๋“ฑ์„ ์ง€์›
class Person { 
	constructor(name) { 
    	this.name = name;
    }
    
    greet() { 
    	console.log(`Hello, ${this.name}!`); 
    } 
} 

class Employee extends Person { 
	constructor(name, company) { 
    	super(name); 
        this.company = company; 
    } 
}

 

 

5. ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น (destructing)

  • ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์‰ฝ๊ฒŒ ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค
const introduce = {name: 'unknown', age: 23};
// key์™€ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๋ณ€์ˆ˜ ์„ ์–ธ
const { name, age } = introduce;
// ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€์ˆ˜ ์„ ์–ธ -> ๋ณ€์ˆ˜์ด๋ฆ„: ํ‚ค๊ฐ’
const { myName: name, myAge: age } = introduce;

console.log(myName) // unknown
console.log(myAge) // 23

 

 

6. Rest Operator / Spread Operator

 

Rest Operator(๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜)๋Š” ๋‚˜๋จธ์ง€ ํ›„์† ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์„ ๋ฌถ์–ด ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์— ์ €์žฅํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ (…์œผ๋กœ ์ €์žฅ)

 

 

Spread Operator(์ „๊ฐœ ๊ตฌ๋ฌธ)๋Š” ๋ฌถ์ธ ๋ฐฐ์—ด ํ˜น์€ ๊ฐ์ฒด๋ฅผ ๊ฐœ๋ณ„์ ์ธ ์š”์†Œ๋กœ ๋ถ„๋ฆฌ

 

 

7. forEach() / map() / reduce()

 

 

- forEach() : ๋ฐฐ์—ด ์š”์†Œ๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ ์ฃผ์–ด์ง„ ํ•จ์ˆ˜(์ฝœ๋ฐฑ)๋ฅผ ์‹คํ–‰

๋ฐฐ์—ด.forEach((์š”์†Œ, ์ธ๋ฑ์Šค, ๋ฐฐ์—ด) => { return ์š”์†Œ });

 

 

- map() : ๋ฐฐ์—ด ๋‚ด์˜ ๋ชจ๋“  ์š”์†Œ ๊ฐ๊ฐ์— ๋Œ€ํ•˜์—ฌ ์ฃผ์–ด์ง„ ํ•จ์ˆ˜(์ฝœ๋ฐฑ)๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜

๋ฐฐ์—ด.map((์š”์†Œ, ์ธ๋ฑ์Šค, ๋ฐฐ์—ด) => { return ์š”์†Œ });

 

 

-reduce() : ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ callbackํ•จ์ˆ˜์˜ ์‹คํ–‰ ๊ฐ’์„ ๋ˆ„์ ํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜

๋ฐฐ์—ด.reduce((๋ˆ„์ ๊ฐ’, ํ˜„์žฟ๊ฐ’, ์ธ๋ฑ์Šค, ์š”์†Œ) => { return ๊ฒฐ๊ณผ }, ์ดˆ๊นƒ๊ฐ’);

 

 

8.๋ชจ๋“ˆ (ESM)

  • ๋ชจ๋“ˆ : ๋…๋ฆฝ์„ฑ์„ ๊ฐ€์ง„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ธ”๋ก
  • import, export ๊ตฌ๋ฌธ์„ ์ด์šฉํ•ด ๋ชจ๋“ˆ ๊ฐ€์ ธ์˜ค๊ธฐ & ๋‚ด๋ณด๋‚ด๊ธฐ ๊ฐ€๋Šฅ
export default func;

import func from './utils/func';

 

 

 

๐Ÿ”น ES6๋ฅผ ์ค‘์š”์‹œ ํ•˜๋Š” ์ด์œ 

 

   1. ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ

  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜, ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด, ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๊ธฐ์กด๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ณ  ๋ช…ํ™•ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค
// ES5
var add = function(a, b) {
    return a + b;
};

// ES6
const add = (a, b) => a + b;

 

    2. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ๊ฐœ์„ 

  • ES6์—์„œ async/await๊ฐ€ ๋„์ž…๋˜์–ด ๋”์šฑ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
fetchData()
    .then(result => {
        // ์ฒ˜๋ฆฌ ๋กœ์ง
    })
    .catch(error => {
        // ์—๋Ÿฌ ์ฒ˜๋ฆฌ
    });

  

    3. ๋ชจ๋“ˆํ™” ์ง€์›

  • ES6๋Š” ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•˜์—ฌ, ์ฝ”๋“œ ๋ถ„๋ฆฌ์™€ ์žฌ์‚ฌ์šฉ์„ ๋” ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜์˜€๋‹ค
  • ๊ฐ ํŒŒ์ผ์—์„œ ํ•„์š”ํ•œ ์ฝ”๋“œ๋งŒ ๊ฐ€์ ธ์˜ค๊ณ , ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋‚˜ ํŒ€ ๋‹จ์œ„ ๊ฐœ๋ฐœ์—์„œ ํŠนํžˆ ์œ ์šฉํ•˜๋‹ค.

 

 

 


 

๊ฐœ๋…์ •๋ฆฌ ๋ฐ ๋งˆ์ธ๋“œ๋งต 

 

4์ฃผ์ฐจ ํ•„๊ธฐ
4์ฃผ์ฐจ ํ•„๊ธฐ

 

 


 

 

 

๐Ÿ”ฅ ๋ฏธ์…˜ ์ธ์ฆ


 

 

 

1๏ธโƒฃ๋กœ์ปฌ DB ์ค€๋น„ ํ•˜๊ธฐ

 

์ €๋Š” MYSQL๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ DB๋ฅผ ์ค€๋น„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

  1. ์ƒ์„ฑํ•  ํ…Œ์ด๋ธ” ์ฝ”๋“œ ์ž‘์„ฑ

ํ…Œ์ด๋ธ”์€ ๊ฐ„๋‹จํ•œ ์œ ์ €ํ…Œ์ด๋ธ”์„ ์ƒˆ๋กญ๊ฒŒ ๊ตฌ์„ฑํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. 

 

-- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ (์„ ํƒํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉ)
USE new_schema;


-- ๊ฐ„๋‹จํ•œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… (์ด๋ฆ„ํ•˜๊ณ  ์ด๋ฉ”์ผ!)
INSERT INTO users (name, email) 
VALUES 
('chaewon', 'alice@example.com'),
('winny', 'winny@example.com');

 

 

   2. DB ์ƒ์„ฑ ์™„๋ฃŒ 

 

 

new_shcema ์ƒ์„ฑ

 

๋”๋ฏธ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ๊ฒฐ๊ณผ

 

 

 

2๏ธโƒฃ๊นƒํ—ˆ๋ธŒ ์„ค์ • ํ•˜๊ธฐ

 

  1. ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ ํ›„ feature/mission-04 ์ƒ์„ฑํ•˜๊ธฐ

        UMC-winny-repo๋ฅผ ์ƒ์„ฑ ํ•œ ๋’ค ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค!

 

 

     2. vscode์—์„œ ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ํ‘ธ์‹œ

        ๋‹ค์Œ vscode์—์„œ git checkout ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ๋ธŒ๋žœ์น˜ ์ด๋™ ํ›„ ํŒŒ์ผ์„ ํ‘ธ์‹œํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค!

 

 

 

 

 

 

 

728x90