๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming ๊ฐœ๋ฐœ/๐ŸŒŠ Javascript, Typescript

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ๊ธฐ์ดˆ๋ฌธ๋ฒ• ๊ณต๋ถ€๋…ธํŠธ - ์ธํ”„๋Ÿฐ Amazing Javascript ํ›„๊ธฐ ๋ฐ ์ถ”์ฒœ!

by kimdee 2024. 7. 12.
๋ฐ˜์‘ํ˜•

 

 

์‹œ์ž‘ํ•˜๋ฉฐ

์ด๋ฒˆ์— ์บกํ‹ดํŒ๊ต๋‹˜์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌด๋ฃŒ๊ฐ•์˜๊ฐ€ ์ƒˆ๋กœ ์˜คํ”ˆ๋๋‹ค.

์‚ฌ์‹ค ์บกํ‹ดํŒ๊ต๋‹˜ ๊ฐ•์˜ ์˜คํ”ˆ ์†Œ์‹์€, ๊ฐœ์ธ์ ์œผ๋กœ ์ข‹์•„ํ•˜๊ณ  ์กด๊ฒฝํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์œ ๋ฅด๋งˆ๋ฌด๋‹˜์„ ํ†ตํ•ด ์•Œ๊ฒŒ๋˜์—ˆ๋Š”๋ฐ

 

์ดํ›„ ๊ฐœ์ธ์ ์œผ๋กœ TS๋ฅผ ๊ณต๋ถ€ํ•  ์ผ์ด ์ƒ๊ฒจ์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ฒŒ ๋˜์—ˆ๋‹ค. 

 

๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ž˜ ์งš์–ด์ฃผ์‹œ๊ธฐ๋„ ํ–ˆ๊ณ , Swift์™€๋„ ๋งŽ์ด ์œ ์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋ฒผ์šด ๋งˆ์Œ์œผ๋กœ ๋“ค์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

๊ฐ•์˜๋งํฌ

 

[์ง€๊ธˆ ๋ฌด๋ฃŒ] Amazing JavaScript - ์ž…๋ฌธ ๊ฐ•์˜ | ์žฅ๊ธฐํšจ(์บกํ‹ดํŒ๊ต) - ์ธํ”„๋Ÿฐ

์žฅ๊ธฐํšจ(์บกํ‹ดํŒ๊ต) | ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ์ดˆ ์ง€์‹. ์‹ค๋ฌด์ž๋กœ์„œ ๊ผญ ์•Œ์•„์•ผ ํ•˜๋Š” ํ•„์ˆ˜ ์ง€์‹๋“ค์„ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์„ค๋ช…ํ•ด ์ค๋‹ˆ๋‹ค. 2024๋…„ ํ˜„๋Œ€ ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ ํŠธ๋ Œ๋“œ๋ฅผ ๋ฐ˜์˜

www.inflearn.com

 

๋“ฃ๋‹ค๋ณด๋‹ˆ ํ•œ ์ดํ‹€, ์ˆœ์‹๊ฐ„์— ์™„๊ฐ•!ํ•˜๊ฒŒ ๋๋‹ค. ์‰ฝ๊ณ  ๊ฐ€๋ณ๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ์‹œ๊ณ  ๊ฐ•์˜ ๊ต์•ˆ์ด ์›น์‚ฌ์ดํŠธ๋กœ ๋”ฐ๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ์–ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ๋“ฃ๊ธฐ ์ข‹์•˜๋‹ค. 

๊ฐ•์˜ ์˜์ƒ์€ ์•ฝ 3์‹œ๊ฐ„์ด์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๊ณต๋ถ€๋…ธํŠธ ์ •๋ฆฌํ•˜๊ณ  ์‹ค์Šตํ•œ ์‹œ๊ฐ„ ํฌํ•จํ•˜๋ฉด 6์‹œ๊ฐ„~7์‹œ๊ฐ„ ์ •๋„ ๊ฑธ๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค.

 

์ธํ”„๋Ÿฐ์—์„œ๋Š” ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉด์„œ ๊ณต๋ถ€๋…ธํŠธ๋ฅผ ํšŒ์ฐจ๋งˆ๋‹ค ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ •๋ฆฌํ•˜๋‹ค๋ณด๋‹ˆ ๋…ธํŠธ๊ฐ€ ์•ฝ 67๊ฐœ...!

 

๊ธฐ์กด ๊ณต๋ถ€๋…ธํŠธ์— ๊ฐœ์ธ์ ์œผ๋กœ ์ •๋ฆฌํ•˜๊ณ  ๋”ฐ๋กœ ์‹ค์Šตํ•œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•˜์—ฌ, ํ•œ๋ฒˆ์— ํŽธํ•˜๊ฒŒ ๋ณผ ์šฉ๋„๋กœ ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌํ•˜์˜€๋‹ค. 

์ดํ›„์—๋„ ์บกํ‹ดํŒ๊ต๋‹˜์˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ฐ•์˜๋“ค๋„ ๊ฒฐ์ œํ–ˆ๋Š”๋ฐ, ์™„๊ฐ•ํ•  ๋•Œ๋งˆ๋‹ค ๊ณต๋ถ€ํ•œ ๊ธฐ๋ก์„ ๋ธ”๋กœ๊ทธ์— ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ!

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋๋‚ด๋ฉด ๋ฆฌ์•กํŠธ๋„ ๋„์ „ํ•  ์˜ˆ์ •!!

 

 

 


 

๊ณต๋ถ€ ๋‚ด์šฉ ์ •๋ฆฌ

์ž‘์—…ํ™˜๊ฒฝ - ์ฝ˜์†”

Chrome ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ, Console ์— ๋“ค์–ด๊ฐ€์„œ ๊ฐ„๋‹จํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์„ ์‹ค์Šตํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ถ•ํ‚ค

  • Window: F12
  • Mac: Cmd + Opt + i

์ฝ˜์†”์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๋ณด๊ธฐ

ใ…š

์ž‘์—…ํ™˜๊ฒฝ - ์ฝ”๋“œ์ƒŒ๋“œ๋ฐ•์Šค

๋ชจ๋“ˆํ™”์™€ ๊ฐ™์ด ๋ณ„๋„์˜ ๋„๊ตฌ์„ค์ •์ด ํ•„์š”ํ•œ ์‹ค์Šต์—์„œ๋Š” ์ฝ”๋“œ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์ด์šฉํ•ด ใ…๋ฆฌ ์„ค์ •๋œ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹ค์Šตํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฝ”๋“œ์ƒŒ๋“œ๋ฐ•์Šค

์ฝ”๋“œ์ƒŒ๋“œ๋ฐ•์Šค ๋‹จ์ถ•ํ‚ค

ctrl+space bar ๋‹จ์ถ•ํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž๋™์™„์„ฑ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ฝ”๋“œ์ƒŒ๋“œ๋ฐ•์Šค๋Š” VSCode์˜ ๊ธฐ๋ณธ์ ์ธ ๋™์ž‘๊ณผ ํŠน์„ฑ์„ ๋งŽ์ด ๊ฐ€์ ธ์˜จ ๊ฐœ๋ฐœํˆด์ด์–ด์„œ ๋™์ผํ•œ ๋‹จ์ถ•ํ‚ค๋„ ์ ์šฉ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฝ”๋“œ์ƒŒ๋“œ๋ฐ•์Šค ์žฅ์ 

ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ ๋ณ€๊ฒฝํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ์ ์šฉ๋˜๊ณ  ์ฝ˜์†”์— ์ฐํžŒ๋‹ค.

๋ณ€์ˆ˜

์˜ˆ์ „์—๋Š” var๋ฅผ ์ด์šฉํ•ด์„œ ์„ ์–ธํ•˜๋‹ค๊ฐ€ ์š”์ฆ˜์—” let, const ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋‹ค๋งŒ ์ˆ˜์—… ์ค‘์—๋Š” var๊ฐ€ ๊ณ„์† ์˜ˆ์ œ๋กœ ๋‚˜์™”๋Š”๋ฐ var๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์ด๋ฏธ ์„ ์–ธํ–ˆ์–ด๋„ ๋˜ ์•„๋ž˜์—์„œ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ผ์ผํžˆ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ๊ณ ์นจ(F5) ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

var ์—ฃ๋‚ ๋ณ€์ˆ˜์„ ์–ธ๋ฐฉ์‹ = 'hi';

let ์š”์ฆ˜๋ณ€์ˆ˜ = 'hi';

newVar = 'hello'; // โœ… OK

const ์š”์ฆ˜์ƒ์ˆ˜ = 10;

์š”์ฆ˜์ƒ์ˆ˜ = 20; // โŒ Error 

let์€ ๊ฐ’์„ ์žฌํ• ๋‹น ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ const๋Š” ์ƒ์ˆ˜์ด๋ฏ€๋กœ ๊ฐ’์„ ์žฌํ• ๋‹น ํ•  ์ˆ˜ ์—†๋‹ค.

๋•Œ๋ฌธ์— const ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์ˆ˜์ธ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ ค๋ฉด ์ฒ˜์Œ ์„ ์–ธ ์‹œ์— ์ดˆ๊ธฐํ™”๋„ ๊ฐ™์ด ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

undefined

๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ๋งŒ ํ•˜๊ณ  ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด undefined ๊ฐ€ ๋œ๋‹ค.

๋ณ€์ˆ˜์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•

์ˆซ์ž, ๋ฌธ์ž์—ด, ์ง„๋ฆฌ๊ฐ’, ๋ฐฐ์—ด, ๊ฐ์ฒด ๋ชจ๋‘ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

let a = 0.6;
let b = 'hi'; // ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌธ์ž์—ด ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ 
let c = true;
let d = []; // ๋ฐฐ์—ด
let e = {}; // ๊ฐ์ฒด

์œ ์˜์‚ฌํ•ญ/์ปจ๋ฒค์…˜

์œ ์˜์‚ฌํ•ญ

๋ณ€์ˆ˜๋ช…์œผ๋กœ ์˜์–ด ๋Œ€์†Œ๋ฌธ์ž, ์–ธ๋”์Šค์ฝ”์–ด(_), ํ•œ๊ธ€์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹จ ์ˆซ์ž๋Š” ๋ณ€์ˆ˜๋ช…์˜ ์ฒซ๊ธ€์ž๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
๊ฐ์ข… ํŠน์ˆ˜๋ฌธ์ž, ๋Œ€์‹œ(-)๋Š” ์‚ฌ์šฉ๋ถˆ๊ฐ€.

์ปจ๋ฒค์…˜

์ฃผ๋กœ camelCase ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ์ฒซ ๊ธ€์ž๋Š” ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ณ , ๋’ค์— ๋ถ™๋Š” ๋‹จ์–ด์˜ ์‹œ์ž‘๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ํ•˜๋Š” ๊ธฐ๋ฒ•.

ํ•จ์ˆ˜

ํ•จ์ˆ˜ ์„ ์–ธ

function ํ•จ์ˆ˜๋ช…(์ธ์ž) {
    // ํ•จ์ˆ˜ ๊ตฌํ˜„๋ถ€
  return ๋ฐ˜ํ™˜๊ฐ’
}

ํ•จ์ˆ˜ ํ˜ธ์ถœ

ํ•จ์ˆ˜๋ช…(์ธ์ž);

์ต๋ช…ํ•จ์ˆ˜์™€ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

// ํ•จ์ˆ˜๋ช…์ด ์—†๋‹ค. 
let ๋ณ€์ˆ˜ = function(์ธ์ž) {
    console.log('์ต๋ช…ํ•จ์ˆ˜', ์ธ์ž);
}

// function ํ‚ค์›Œ๋“œ์—†์ด ์ต๋ช…ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
let ๋ณ€์ˆ˜2 = (์ธ์ž) => {
    console.log('ํ™”์‚ดํ‘œํ•จ์ˆ˜', ์ธ์ž);
}

์ผ๊ธ‰ ํ•จ์ˆ˜

ํ•จ์ˆ˜๊ฐ€ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์–ด๋””๋“  ํ• ๋‹น๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด 1๊ธ‰ ํ•จ์ˆ˜๋กœ์„œ์˜ ํŠน์„ฑ.

๋•Œ๋ฌธ์— ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ๋„ ์‚ฌ์šฉ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

function ํ•จ์ˆ˜(์ธ์ž) {
  ์ธ์ž();
}

ํ•จ์ˆ˜(function() {
  console.log('์ผ๊ธ‰ํ•จ์ˆ˜');
});

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ์ถ•์•ฝ ๋ฌธ๋ฒ•

var annonymous = () => { console.log('hi, i\`m annonymous.'); }
  1. ๋ฐ˜ํ™˜๋ฌธ ํ•˜๋‚˜๋งŒ ํ•จ์ˆ˜๋ณธ๋ฌธ์— ์žˆ์„ ๊ฒฝ์šฐ {} ์ค‘๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
    () => 10+20; // {} ์„ ์•ˆ ์”€
  2. ์ „๋‹ฌ์ธ์ž๊ฐ€ ํ•˜๋‚˜์ผ ๊ฒฝ์šฐ () ์†Œ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žผํ•  ์ˆ˜ ์žˆ๋‹ค.
    let a = num => { return num * 10; }
  3. 1๊ณผ 2๋ฅผ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค. (), {}๋ฅผ ๋ชจ๋‘ ์ƒ๋žต.
    let a = num => num * num;

์กฐ๊ฑด๋ฌธ

if, else ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์กฐ๊ฑด๋ฌธ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ค‘๊ฐ„์— ์กฐ๊ฑด์„ ๋” ๋‹ฌ๊ณ  ์‹ถ์œผ๋ฉด else if ํ‚ค์›Œ๋“œ ์‚ฌ์šฉํ•œ๋‹ค.

let height = 130; 
if (height >= 120) { console.log('ํƒ‘์Šน๊ฐ€๋Šฅ'); } else { console.log('ํƒ‘์Šน๋ถˆ๊ฐ€'); }

๋ฐ˜๋ณต๋ฌธ

for ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

for(let i=0; i<10; i++) {
  console.log(i);
}

๊ฐ์ฒด Object

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ์ฒด๊ธฐ๋ฐ˜ ์–ธ์–ด์ด๋‹ค. ๋ฐฐ์—ด๋„ ๊ธฐ์ˆ ์ ์œผ๋กœ ๋”ฐ์ง€๋ฉด ๊ฐ์ฒด์ด๋ฉฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ ์ •๋ง ๋งŽ์ด ๋‹ค๋ฃฌ๋‹ค.

๊ฐ์ฒด ์„ ์–ธํ•˜๋Š” ๋ฐฉ์‹

key: value ํ˜•์‹์œผ๋กœ {} ์ค‘๊ด„ํ˜ธ ๋‚ด์— ์„ ์–ธํ•œ๋‹ค.

let obj = {
  id: 10,
  name: 'Dee'
}

obj // { id: 10, name: 'Dee' }

๊ฐ์ฒด์— ์†์„ฑ ์ถ”๊ฐ€ํ•˜๊ธฐ

๋งจ ์ฒ˜์Œ์— ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ์— ๊ฐ์ฒด ํ˜•ํƒœ๋กœ๋งŒ ์„ ์–ธํ•˜๋ฉด ์ดํ›„ ์–ผ๋งˆ๋“ ์ง€ ๊ฐ์ฒด ๋‚ด์˜ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

let obj = {};

obj.id = 36;
obj.hobby = '๊ฐ€๋“œ๋‹';

obj // { id: 36, hobby: '๊ฐ€๋“œ๋‹' }

๊ฐ์ฒด ์ถ•์•ฝ ๋ฌธ๋ฒ• Enhanced Object Literal

๊ฐ์ฒด๋ฅผ ์ •์˜ํ•  ๋•Œ ํƒ€์ดํ•‘์„ ์ค„์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ ํŠน์ • ๋ณ€์ˆ˜ a ์— ๋Œ€ํ•ด ์ •์˜๋˜์–ด ์žˆ์„ ๋•Œ, a์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

let a = 10;

let obj = {
  a: a
}

obj // { a:10 }

๊ทธ๋Ÿฐ๋ฐ a์˜ ๋ณ€์ˆ˜๋ช…์„ ๊ทธ๋Œ€๋กœ key ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐ’๋„ a์™€ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด key:value ์œ„์น˜์— ๋ณ€์ˆ˜ ์ด๋ฆ„๋งŒ ๋„ฃ์–ด ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.

let a = 10;
let b = 20;

let obj = {
  a,
  b,
  c: 40
}

obj // { a: 10, b: 20, c: 40 }

๊ฐ์ฒด ์†์„ฑ์— ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

let dee = {
  studying: function() { console.log('์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณต๋ถ€์ค‘!'); }
};

dee.studying(); // ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณต๋ถ€์ค‘!

function ํ‚ค์›Œ๋“œ์™€ key๊ฐ’ ์—†์ด ๋ฐ”๋กœ ํ•จ์ˆ˜๋ช…() {} ํ˜•ํƒœ๋กœ ๊ฐ์ฒด์•ˆ์— ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

const ๊ฐœ๋ƒฅ์ด = { ์šธ๊ธฐ() { console.log('๋ฉ๋ฉ๋ƒฅ๋ƒฅ'); } };

๊ฐœ๋ƒฅ์ด.์šธ๊ธฐ(); // ๋ฉ๋ฉ๋ƒฅ๋ƒฅ 

๋ฐฐ์—ด

[] ๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ํ†ตํ•ด ๋ฐฐ์—ด์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

let ๋ฐฐ์—ด = [];

๋ฐฐ์—ด ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•˜์—ฌ ๊ฐ’์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

// ๋ฐฐ์—ด[์ธ๋ฑ์Šค] = ๊ฐ’; 
๋ฐฐ์—ด[0] = 10;

์ด๋ ‡๊ฒŒ ์ธ๋ฑ์Šค์— ๋ฐ”๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ, ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ฐ’์ด ๋ฐ”๋กœ ๋’ค์—ฌ๋„ ์ธ๋ฑ์Šค๋ฅผ ์ ํ”„ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ ์ค‘๊ฐ„์— ๋นˆ ๊ฐ’์ด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋œ๋‹ค.

๋ฐฐ์—ด ์กฐ์ž‘๋ฐฉ๋ฒ•๊ณผ ๋‚ด์žฅ API

๋‚ด์žฅ API: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐœ๋ฐœ์ž๋“ค์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ๊ธฐ๋Šฅ
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์œผ๋กœ๋Š” ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ Prototype method ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

  • ๋ฐฐ์—ด์˜ ๊ธธ์ด
let arr = [];
arr.length // 0
  • push๋ฅผ ์ด์šฉํ•ด ๋ฐฐ์—ด ๋์— ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.
var arr = ['a','b'];
arr.push('c');

arr // ['a', 'b', 'c']
  • ๊ทธ ์™ธ์—๋„ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฐ์—ด ๋‚ด์žฅ API๋“ค์ด ์žˆ๋‹ค.
    push(๊ฐ’)
    pop()
    splice()
    slice()

๋ฐฐ์—ด์˜ ๋‚ด์šฉ์„ ์กฐ์ž‘ํ•  ๋•Œ ๋‚ด์žฅ API๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์•ˆ์ „ํ•œ๋‹ค. ์‹ค์งˆ์ ์œผ๋กœ ์›น์•ฑ์„ ์ด์šฉํ•  ๋•Œ๋„ ์ด ๋ฐฉ์‹์„ ์ด์šฉํ•ด ๋งŽ์ด ๋งŒ๋“ ๋‹ค.

๋ฐฐ์—ด ๋ฐ˜๋ณต๋ฌธ: forEach

var arr = [1,2,3];

arr.forEach(function(value, index) { console.log(value, index) });

ํ•จ์ˆ˜์— ๋„˜๊ธธ๋•Œ ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์ฒซ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‘๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ ์–ธํ•˜๊ฒŒ ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐฐ์—ด์˜ ๋˜๋‹ค๋ฅธ ์ฃผ์š” API: map, filter

  • map ์„ ํ†ตํ•ด ๋ฐฐ์—ด ์š”์†Œ ๊ฐ’์„ ๋ณ€ํ™˜ํ•œ ๋‹ค๋ฅธ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
[10,20,30].map(function(value, index) { return value * index; }) 
// [0, 20, 300] ์ด ๋ฐ˜ํ™˜๋œ๋‹ค. 
  • filter ๋ฅผ ํ†ตํ•ด ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๋ฐฐ์—ด ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • [10,20,30].filter( value => { return value > 10 });

// [20, 30]์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

## ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด 
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๋ฌธ์ž์—ด์„ ์ •์˜ํ•  ๋•Œ '' ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ES6๋ถ€ํ„ฐ๋Š” ๋ฐฑํ‹ฑ(\`)์„ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. 

๋ฐฑํ‹ฑ์„ ์ด์šฉํ•˜๋ฉด ํ•œ์ค„์ด ์•„๋‹Œ ์—ฌ๋Ÿฌ์ค„๋„ ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ผ์›Œ๋„ฃ์–ด ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค. (ํ…์ŠคํŠธ ๋ณด๊ฐ„) 

```javascript
var a = `
๋ฐฑํ‹ฑ์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ •์˜ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ 
์—ฌ๋Ÿฌ์ค„์šธ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.
`

var b = 3
let c = `์•ˆ๋…•x${b}`

c // '์•ˆ๋…•x3'

๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง Destructuring

๊ธฐ์กด์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์—์„œ ์ข€ ๋” ์ง„ํ™”๋œ ์ตœ์‹ ๋ฌธ๋ฒ•. ์ฝ”๋“œ์˜ ๋ฐ˜๋ณต์„ ์ค„์ด๊ธฐ ์œ„ํ•œ ๊ฐœ์„ ๋œ ๋ฌธ๋ฒ•์ด๋‹ค.

๋ฐฐ์—ด์— ๋Œ€ํ•œ ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง

๊ธฐ์กด์—๋Š” ๋งค๋ฒˆ ๋ฐฐ์—ด์—์„œ ํŠน์ • ์š”์†Œ๋ฅผ ๊บผ๋‚ด์˜ฌ ๋•Œ ์ธ๋ฑ์Šค ํ•˜๋‚˜ํ•˜๋‚˜ ์ ‘๊ทผํ•˜์—ฌ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ๋‹ค.

// AS-IS 
var arr = ['apple', 10]; 

var stockName = arr[0];
var count = arr[1]; 

๋””์ŠคํŠธ๋Ÿญ์ณ๋ง์„ ํ†ตํ•ด ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ข€ ๋” ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ๋ถ™์ด๊ณ , ์•ˆ์— ์„ ์–ธํ•  ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์€ ๋‹ค์Œ ๊ฐ’์œผ๋กœ ๋ฐฐ์—ด์„ ๋„ฃ์œผ๋ฉด ์ž๋™์œผ๋กœ ์ฒซ๋ฒˆ์งธ, ๋‘๋ฒˆ์งธ ๋ณ€์ˆ˜์— ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ, ๋‘๋ฒˆ์งธ ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค.

let arr = ['PLTR', 20]

// var [๋ณ€์ˆ˜์ด๋ฆ„1, ๋ณ€์ˆ˜์ด๋ฆ„2] = ๋ฐฐ์—ด;
let [stock, count] = arr; 

๊ฐ์ฒด์•  ๋Œ€ํ•œ ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง

๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ์ ‘๊ทผํ•  ๋•Œ๋„ ์ผ์ผํžˆ ๊ฐ์ฒด ์ด๋ฆ„์„ ์ ์–ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค.

let obj = { language: 'english', score: 990 };

let myLanguage = obj.languange;
let myScore = obj.score;

๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ์™€ ๋™์ผํ•˜๊ฒŒ ํ•  ๊ฒฝ์šฐ, ๋””์ŠคํŠธ๋Ÿญ์ณ๋ง์„ ํ†ตํ•ด์„œ ๋ฐ”๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด์„œ ๊ฐ์ฒด์˜ ๊ฐ’์„ ๊บผ๋‚ด์™€ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

let obj = { skill: 'drawing', hobby: 'game' };

// let { ๋ณ€์ˆ˜์ด๋ฆ„1, ๋ณ€์ˆ˜์ด๋ฆ„2 } = ๊ฐ์ฒด;
let { skill, hobby } = obj;

์ฃผ์˜, ๊ฐ์ฒด๋Š” ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„๊ณผ ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ๋™์ผํ•˜์ง€ ์•Š์œผ๋ฉด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

์Šคํ”„๋ ˆ๋“œ ์˜คํผ๋ ˆ์ดํ„ฐ Spread Operator

ํŽผ์นจ ์—ฐ์‚ฐ์ž๋กœ, ๊ฐ์ฒด ๋˜๋Š” ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๋‹ค๋ฅธ ๊ฐ์ฒด ๋˜๋Š” ๋‹ค๋ฅธ ๋ฐฐ์—ด๋กœ ๋ณต์ œ, ์˜ฎ๊ธธ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฐ์‚ฐ์ž๋Š” ...๋กœ ๋ง์ค„์ž„ํ‘œ์™€ ๋™์ผํ•œ ๋ชจ์–‘์œผ๋กœ, ๋ณต์ œํ•˜๋ ค๋Š” ๊ณณ์— ๋ฐฐ์—ด ๋˜๋Š” ๊ฐ์ฒด์ด๋ฆ„ ์•ž์— ๋ถ™์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

// ๊ฐ์ฒด 
let obj = { id: 1, name: 'White' }; 

let user = { 
  ...obj,
  level: 15
}

user // { id: 1, name: 'White', level: 15 }
// ๋ฐฐ์—ด 
let a = [2,3,4];
let b = [ 1, ...a, 5];

b // [1,2,3,4,5] 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“ˆํ™”: Import์™€ Export

๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์œ ํšจ๋ฒ”์œ„๋Š” ์ „์—ญ์œผ๋กœ, HTML ํŒŒ์ผ์—์„œ <script> ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ๋กœ๋”ฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๋ณดํ†ต์€ ํŒŒ์ผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ๋ถ„๋˜๊ธธ ๊ธฐ๋Œ€ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ ‡๊ฒŒ ๋™์ž‘๋˜์ง€ ์•Š๋Š”๋‹ค.

์ดˆ๋ฐ˜์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด ์ž์ฒด๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์˜ ์ž‘์€ ๋™์ž‘์„ ๋‹ด๋‹นํ•˜๊ธฐ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋‹ค๋ณด๋‹ˆ ๋ชจ๋“ˆํ™”์— ๋Œ€ํ•œ ์ง€์›์ด ๋˜์ง€ ์•Š์•˜์—ˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด first, second์— ๊ฐ๊ฐ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , ๋ณ€์ˆ˜๋ช…์ด ์ค‘๋ณต๋  ๊ฒฝ์šฐ, ๋กœ๋“œ๋˜๋Š” ๊ฐ’์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ’์„ ์ฐพ์•„์˜ค๋‹ค๋ณด๋‹ˆ ์›ํ•˜๋Š” ๊ฐ’์ด ๋‚˜์˜ค์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

<!- index.html -->
<body> 
  <script src="first.js"></script>
  <script src ="second.js"></script> 
  <script>
    getPrice(); // 3000์ด ์˜ค๊ฒŒ๋œ๋‹ค. 
  </script>
</body>
// first.js 
var price = 1500;
function getPrice() {
  return price;
}
// second.js
var price = 3000;

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

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Require.js
  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ชจ๋“ˆํ™” ํŒจํ„ด

์ด์ œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์ž์ฒด์—์„œ ๋ชจ๋“ˆํ™”๋ฅผ ์ง€์›ํ•˜๊ฒŒ ๋˜์–ด ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

ES6+(2015๋…„ ECMAScript) ์—์„œ Import, Export ๋ฌธ๋ฒ•์ด ๋ฐ”๋กœ ๊ทธ๊ฒƒ์ด๋‹ค. React, Vue์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์“ธ ๋•Œ import, export๋ฅผ ํ•„์ˆ˜์ ์œผ๋กœ ์“ฐ๋‹ค๋ณด๋‹ˆ ์ด์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.

Import์™€ Export ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

๋‹ค๋ฅธ ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋‚ผ ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ์•ž์— export ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ธ๋‹ค.

export ๋ณ€์ˆ˜, ํ•จ์ˆ˜

์ด๋ฏธ export๋กœ ๋‚ด๋ณด๋‚ธ ๋ณ€์ˆ˜, ํ•จ์ˆ˜๋“ค์€ ์‚ฌ์šฉํ•  ๊ณณ์—์„œ import ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

import { ๋ถˆ๋Ÿฌ์˜ฌ ๋ณ€์ˆ˜, ๋ถˆ๋Ÿฌ์˜ฌ ํ•จ์ˆ˜ } from 'ํŒŒ์ผ๊ฒฝ๋กœ' 

default export, import

๋‚ด๋ณด๋‚ผ ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ํŒŒ์ผ ์•ˆ์—์„œ ํ•˜๋‚˜์ผ ๊ฒฝ์šฐ default ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์„œ ๋‚ด๋ณด๋‚ด๊ณ , ๊ฐ€์ ธ์˜ฌ ๋•Œ๋„ ์ค‘๊ด„ํ˜ธ ์—†์ด ๊ฐ€์ ธ์˜จ๋‹ค.
๋ณดํ†ต Vue, React์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚ด๋ณด๋‚ผ ๋•Œ export default๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

let msg = 'hello';

export default  msg;
import msg from "./app"; 

Import, Export ๋ฅผ ์ด์šฉํ•œ ๋ชจ๋“ˆํ™” ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ ์‹ค์Šต

๋ณ„๋„์˜ ๋„๊ตฌ ์„ค์ •์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ์‹ค์Šต์„ ํ•œ๋‹ค.

JS ํŒŒ์ผ ๋ชจ๋“ˆํ™”๋ฅผ ์œ„ํ•œ Import, Export

// math.js
const pi = 3.14;

function sum(a,b) { return a*b; };

export { pi, sum }
// app.js 
let message = 'Hi :)'

export default message
// index.mjs

// ์ผ๋ฐ˜ ๋ฌธ๋ฒ•
// import { ๋ณ€์ˆ˜, ํ•จ์ˆ˜ } from "ํŒŒ์ผ๊ฒฝ๋กœ";
import { pi, sum } from "./math.js"; // ctrl+space๋กœ ์ž๋™์™„์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

// default ๋ฌธ๋ฒ•
// import ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜ from "ํŒŒ์ผ๊ฒฝ๋กœ";
import message from "./app";

console.log(pi);
console.log(sum(pi, 10));
console.log(message);

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Import, Export

์™ผ์ชฝ์— ์žˆ๋Š” dependencies ์—์„œ ๊ฒ€์ƒ‰ํ•ด์„œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

lodash๋ผ๊ณ  ํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

lodash ๊ณต์‹ํ™ˆํŽ˜์ด์ง€
lodash ๋Š” ์ •๋ง ๋งŽ์ด ์“ฐ์ด๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋กœ์ง์ด๋‚˜ ๊ตฌ๋ฌธ์„ ๊ธฐ๋Šฅ์œผ๋กœ ์—ฎ์–ด๋†“์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

// import {  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธฐ๋Šฅ } from "๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„";
// import ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‚ฌ์šฉํ•  ์ด๋ฆ„ from "๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„";

import lo from "lodash"; 

console.log(lo); // ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„์„ ์ฝ˜์†”์— ์ฐ์œผ๋ฉด ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์œ ํ‹ธ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 
console.log(lo.VERSION); // lodash์˜ ๋ฒ„์ „ ์ •๋ณด๊ฐ€ ๋œฌ๋‹ค. 

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

์˜ˆ๋กœ ์œ ํŠœ๋ธŒ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•˜๋Š” ๊ฒƒ๋“ค์ด ๋ฌด์—‡์ธ์ง€ ๊ธฐ์ˆ ํ•ด๋ณด์ž.

  • ์‚ฌ์šฉ์ž์ •๋ณด์š”์ฒญ
    fetchUser(); // 0.1์ดˆ
  • ์ขŒ์ธก ๋ฉ”๋‰ด ์ •๋ณด ์š”์ฒญ
    fetchMenuInfo(); // 1์ดˆ
  • ์˜์ƒ ๋ณธ๋ฌธ ์š”์ฒญ
    fetchContents(); // 1์‹œ๊ฐ„
  • ํŽ˜์ด์ง€ UI ํ‘œ์‹œ
    renderPageUI(); // 2์ดˆ

๋งŒ์•ฝ ๊ฐ ์š”์†Œ๋งˆ๋‹ค ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์œ„์™€ ๊ฐ™๋‹ค๋ฉด, ์ดํ•ฉ ์ž‘์—…์€ ์ตœ์†Œ 1์‹œ๊ฐ„์ด ๋ ํ…๋ฐ, ์‚ฌ์ดํŠธ์—์„œ 1์‹œ๊ฐ„ ๋™์•ˆ ์•„๋ฌด๊ฒƒ๋„ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๋ฉด ์•„๋ฌด๋„ ์ด ์‚ฌ์ดํŠธ๋ฅผ ์ฐพ์ง€ ์•Š์„ ๊ฒƒ.์—ฌ๊ธฐ์„œ ๊ฐ๊ฐ ํ•จ์ˆ˜, ํŠน์ • ์ฝ”๋“œ๊ฐ€ ์—ฐ์‚ฐ์ด๋‚˜ ์‹คํ–‰์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ทธ ์ฝ”๋“œ์˜ ์‹คํ–‰์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ํ•œ๋‹ค.

์ฆ‰, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ์œ„ํ•ด ๋น„๋™๊ธฐ(Asynchronous)๋ผ๋Š” ๊ฐœ๋…์„ ๋„์ž…ํ•˜์—ฌ ํŠน์ • ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ธฐ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค.

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฐฉ์‹ 3๊ฐ€์ง€

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฐฉ์‹์€

์ฝœ๋ฐฑํ•จ์ˆ˜, Promise, Async-Await

์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

๋น„๋™๊ธฐ์ฒ˜๋ฆฌ: ์ฝœ๋ฐฑํ•จ์ˆ˜

์š”์ฒญ ์™„๋ฃŒ ํ›„์— ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.
1๊ธ‰ํ•จ์ˆ˜์˜ ๊ฐœ๋…์ด ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ ๊ผญ ์‚ฌ์šฉํ•  ์ˆ˜ ๋ฐ–์— ์—†๋Š” ๋ฌธ๋ฒ•์ด ์ฝœ๋ฐฑํ•จ์ˆ˜ ๋ฌธ๋ฒ•์ด๋‹ค.

function fetchMenuInfo() {
  // return "๋ฉ”๋‰ด๋ช…";
  // ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ผ jquery, axios, ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ๋Š”๋‹ค๋ฉด ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๊ฒƒ
  // return axios.get("");
  return $.get("http://domain.com/api/menu");
}

fetchUser();

// ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์ด ๋ณ€์ˆ˜์— ๋‹ด๊ธด๋‹ค.
var menu = fetchMenuInfo();

fetchContents();

renderPageUI(menu);

์„œ๋ฒ„ ์š”์ฒญ ํ›„ ๋ฐ›์•„์˜ค๋Š” ๊ฒƒ์ด ํ•œ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ•˜๋ฉด, ๊ทธ๊ฑธ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๊ณ  ํ•˜๋ฉด ์ดํ›„ ์ฝ”๋“œ๋Š” ์ง„ํ–‰์ด ๋˜์ง€ ์•Š๊ณ , ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š”, ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์š”์†Œ๊ฐ€ ์—†์–ด์„œ ์›นํŽ˜์ด์ง€์˜ ํ’ˆ์งˆ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ์ฝ”๋“œ๋Š” let menu = ํ•จ์ˆ˜(); ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ฝœ๋ฐฑ์„ ์ด์šฉํ•œ๋‹ค.

๋ฐ”๋กœ ์ด๋ ‡๊ฒŒ

// ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ฝœ๋ฐฑ ๋“ฑ๋ก
function fetchMenuInfoAsync() {
  let menu;
  return $.get("http://domain.com/api/menu", function (response) {
    menu = response;
  });
}

ํ˜น์€ ์ด๋ ‡๊ฒŒ ๋‘˜ ์ˆ˜๋„ ์žˆ๋‹ค.

let menu;
fetchMenuInfo(function(response) {
  menu = response;
});

๋งŒ์•ฝ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™”์„ ๋•Œ ํŠน์ •๋กœ์ง์„ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ํ•˜๊ณ  ์‹ถ์€ ๋™์ž‘์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

let menu;
fetchMenuInfo(function(response) {
  menu = response;
  renderPageUI(menu);
});

setTimeOut() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ฝœ๋ฐฑํ•จ์ˆ˜ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•ด๋ณด๊ธฐ

function fetchMenu() {
  return { first: "๋งˆ์ดํŽ˜์ด์ง€" };
}

let menu;
menu = fetchMenu();

console.log("์ถœ๋ ฅ๊ฒฐ๊ณผ: ", menu);

์ด๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ ๋ฐ”๋กœ ์ฝ˜์†”์— ๊ฐ’์ด ์ฐํžˆ์ง€๋งŒ setTimeOut()์„ ํ†ตํ•ด ์ผ์ •์‹œ๊ฐ„ ๋”œ๋ ˆ์ด๋ฅผ ์ฃผ๊ฒŒ ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ถœ๋ ฅ๊ฒฐ๊ณผ์˜ ๊ฐ’์ด ์—†๋Š” ์ƒํƒœ๋กœ ์ฝ˜์†”์— ์ฐ๊ฒŒ ๋˜์–ด์„œ undefined๊ฐ€ ์˜ค๊ฒŒ๋œ๋‹ค.

function fetchMenu() {
  setTimeout(() => {
    // #1
    let data = { first: "๋งˆ์ดํŽ˜์ด์ง€" };
    return data;
  }, 5000); // 5์ดˆ ๋”œ๋ ˆ์ด
}

let menu;
menu = fetchMenu();

// #2
console.log("์ถœ๋ ฅ๊ฒฐ๊ณผ: ", menu);

์ฆ‰ ์œ„์˜ ์ฝ”๋“œ์—์„œ #2 ์ฝ”๋“œ๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ  ์ดํ›„ #1์ด ์™„๋ฃŒ๋œ๋‹ค.

๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›๊ณ  ๋‚˜์„œ ์ถœ๋ ฅ์„ ํ•˜๋ ค๊ณ  ํ•˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋“ฑ๋กํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

function fetchMenu(callbackFunction) {
  setTimeout(() => {
    // #1
    let data = { first: "๋งˆ์ดํŽ˜์ด์ง€" };
    callbackFunction(data);
    return data;
  }, 5000); // 5์ดˆ ๋”œ๋ ˆ์ด
}

let menu;
menu = fetchMenu(function (data) {
  console.log("5์ดˆ ๋’ค ๊ฒฐ๊ณผ", data);
  menu = data;
  console.log("5์ดˆ ๋’ค ์ถœ๋ ฅ๊ฒฐ๊ณผ: ", menu);
});

// #2
console.log("์ถœ๋ ฅ๊ฒฐ๊ณผ: ", menu);

์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋‹จ์ 

์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์ถฉ๋ถ„ํžˆ ํ˜„๋Œ€์˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ผ์„ ๋•Œ์˜ ๋‘๊ฐ€์ง€ ๋‹จ์ ๋•Œ๋ฌธ์— Promise ๋˜๋Š” Async/Await์„ ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  1. ์—๋Ÿฌ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๋ฒˆ๊ฑฐ๋กœ์›€

๊ธฐ์กด ์ฝ”๋“œ์—์„œ ์ฝ”๋“œ์— ์—๋Ÿฌ๊ฐ€ ๋‚  ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ๋ ๊นŒ?
์—๋Ÿฌ ๊ฐ’์„ ์ฝœ๋ฐฑ์˜ ์ธ์ž๋กœ ๋„ฃ์–ด์ฃผ๊ณ  ์—๋Ÿฌ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ๋Œ€์‘์„ ํ•˜๋Š” ๋“ฑ ์ถ”๊ฐ€์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

function fetchMenu(callbackFunction) {
  setTimeout(() => {
    // #1
    let data = { first: "๋งˆ์ดํŽ˜์ด์ง€" };
    callbackFunction(error, data);
    return data;
  }, 5000); // 5์ดˆ ๋”œ๋ ˆ์ด
}

let menu;
menu = fetchMenu(function (error, data) {
  // ์—๋Ÿฌํ•ธ๋“ค๋ง
  if (error) {
    console.log("์—๋Ÿฌ์ฒ˜๋ฆฌ");
    return;
  }
  console.log("5์ดˆ ๋’ค ๊ฒฐ๊ณผ", data);
  menu = data;
  console.log("5์ดˆ ๋’ค ์ถœ๋ ฅ๊ฒฐ๊ณผ: ", menu);

  renderPageUI(function (response) {
    response;
  });
});
  1. ์ฝœ๋ฐฑ ์ง€์˜ฅ Callback Hell

๋Ÿฌ๊ฐ€ ํ•˜๋‚˜์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•  ๋• ๋ฌธ์ œ๊ฐ€ ์—†์–ด๋ณด์—ฌ์ง€์ง€๋งŒ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ๊ฒน์ณ์ง€๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
์ฝœ๋ฐฑ ์•ˆ์— ๊ณ„์† ์ฝœ๋ฐฑ, ์ฝœ๋ฐฑ์œผ๋กœ ์ด์–ด์ง€๋Š” ๊ฒƒ์„ ์ฝœ๋ฐฑ ์ง€์˜ฅ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์ด ๊ฒฝ์šฐ ์–ด๋Š ์ง€์ ์— ์–ด๋–ค ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ๋˜๋Š”์ง€ ์ฝ”๋“œ ๋ถ„๊ธฐ๊ฐ€ ๋ณต์žกํ•ด์ง„๋‹ค.

๋น„๋™๊ธฐ์ฒ˜๋ฆฌ: Promise

์ฝœ๋ฐฑ๋ณด๋‹ค ๊ฐœ์„ ๋œ ๋ฌธ๋ฒ•์ด ํ•„์š”ํ–ˆ๊ณ  ๊ทธ์— ๋งž์ถฐ Promise๊ฐ€ ๋“ฑ์žฅํ–ˆ๋‹ค.

๊ฐ•์‚ฌ๋‹˜ ๋ธ”๋กœ๊ทธ: Promise

Promise๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด์ด๋‹ค.

Promise ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

Promise ๋ฅผ ์ด์šฉํ•ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ•จ์ˆ˜๋ฅผ ์ฒด์ด๋‹ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ ,๊ฐ„๊ฒฐํ™”๋˜๋ฉฐ ์ „์ฒด ๊ตฌ๊ฐ„์—์„œ ๋กœ์ง์ƒ ๋‚œ ์—๋Ÿฌ๊ฐ€ catch์—์„œ ์žก์•„์ค„ ์ˆ˜ ์žˆ๋‹ค.

et menu;

// ํ”„๋กœ๋ฏธ์Šค ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ
// .then()์€ ์ฝ”๋“œ์˜ ์‹คํ–‰์ด ๋๋‚˜๊ณ  ๋‚˜๋ฉด then ์ด ์‹คํ–‰์ด ๋จ
function fetchMenuPromise(callbackFunction) {
  return new Promise(function (resolve, reject) {
    setTimeout(() => {
      // #1
      let data = { first: "๋งˆ์ดํŽ˜์ด์ง€" };

      if (data.first != 1) {
        reject(new Error("first data is not 1"));
      }

      resolve(data);
    }, 5000); // 5์ดˆ ๋”œ๋ ˆ์ด
  });
}

fetchMenuPromise() // Promise ๊ฐ์ฒด์—ฌ์•ผ๋งŒ then, catch๊ฐ€ ์œ ํšจํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.
  .then(function (result) {
    console.log("5์ดˆ ๋’ค ์‹คํ–‰", result);
    menu = result;
  })
  .catch(function (error) {
    // catch๋ฅผ ์ด์šฉํ•ด ์—๋Ÿฌํ•ธ๋“ค๋ง
    console.log("์—๋Ÿฌ ์ฒ˜๋ฆฌ", error);
    return;
  });

๋น„๋™๊ธฐ์ฒ˜๋ฆฌ: Async/Await

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํŒจํ„ด ์ค‘ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋‚˜์˜จ ๋ฌธ๋ฒ•
์ฝœ๋ฐฑํ•จ์ˆ˜์™€ ํ”„๋กœ๋ฏธ์Šค์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ๊ธฐ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

[๊ฐ•์‚ฌ๋‹˜ ๋ธ”๋กœ๊ทธ: Async, Await](https://joshua1988.github.io/web-development/javascript/js-async-await/

Async/Await์˜ ์žฅ์ 

๊ธฐ๋ณธ์ ์œผ๋กœ ์œ„ ์•„๋ž˜๋ฅผ ์™”๋‹ค๊ฐ”๋‹ค ํ•˜๋ฉฐ ์ฝ๋Š” ๋‹ค์ด๋‚˜๋ฏน ๋ฆฌ๋”ฉ์ด ์•„๋‹Œ, ์œ„์—์„œ๋ถ€ํ„ฐ ์•„๋ž˜๋กœ ํ•œ์ค„ํ•œ์ค„ ์ฝ์œผ๋ฉฐ ์‚ฌ๊ณ ํ•˜๋Š” ๊ฒƒ์ด ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํŽธํ•˜๋‹ค. ์ฝœ๋ฐฑ๊ณผ Promise ์˜ ๊ฒฝ์šฐ ์ฝ”๋“œ์˜ ํ๋ฆ„์ด ์ธ๊ฐ„์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ์‹œ๊ฐ์  ํ๋ฆ„๊ณผ ๋งž์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๊ฒƒ์ด Async, Await ๋ฌธ๋ฒ•์œผ๋กœ ์œ„์—์„œ๋ถ€ํ„ฐ ์•„๋ž˜๋กœ ํ•œ์ค„ ํ•œ์ค„์”ฉ ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด async/await ์ฝ”๋“œ๊ฐ€ ๋œ๋‹ค.

Async, Await ๋ฌธ๋ฒ•

๋™๊ธฐ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ async, await ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

async function ํ•จ์ˆ˜๋ช…() {
  await ๋น„๋™๊ธฐ_์ฒ˜๋ฆฌ_๋ฉ”์„œ๋“œ_๋ช…();
}

๊ฐ•์‚ฌ๋‹˜ ์˜ˆ์ œ์™€ ๋‹ค๋ฅด๊ฒŒ axios๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹ค์ œ API์—์„œ ๋ช…์–ธ์„ ๊ฐ€์ ธ์™€์„œ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

  • Axios ์‚ฌ์šฉ๋ฐฉ๋ฒ• ์ฐธ๊ณ ๋งํฌ codeit
import axios from "axios";

const instance = axios.create({
  baseURL: "https://type.fit/api/quotes",
});

// async=await ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ
async function fetchMenu() {
  return await instance.get();
}

async function init() {
  let quote; // undefined

  quote = await fetchMenu();

  console.log(quote.data);
}

init();

Async, Await ์˜ ์—๋Ÿฌ ํ•ธ๋“ค๋ง

await ๊ตฌ๋ฌธ์„ try๋กœ ๋ฌถ๊ณ , ๋’ค์— catch ๋กœ error๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

์ดํ›„์— ํ•  ๋‹ค๋ฅธ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋กœ await ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ˜ธ์ถœํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

import axios from "axios";

const instance = axios.create({
  baseURL: "https://type.fit/api/quotes",
});

// async=await ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ
async function fetchMenu() {
  return await instance.get();
}

async function renderPageUI() {
  console.log("ํŽ˜์ด์ง€ UI ๋ Œ๋”๋ง");
}

async function init() {
  try {
    let quote; // undefined
    quote = await fetchMenu();
    await renderPageUI();
    console.log(quote.data);
  } catch (error) {
    console.log(error);
  }
}

init();

 

 


 

 

์˜ค๋Š˜๋„ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. 

 

๊ถ๊ธˆํ•˜๊ฑฐ๋‚˜ ๋‚˜๋ˆ„๊ณ  ์‹ถ์€ ์–˜๊ธฐ๊ฐ€ ์žˆ์œผ์‹œ๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”!

์žฌ๋ฐŒ๊ฒŒ ์ฝ์œผ์…จ๋‹ค๋ฉด ๊ณต๊ฐ๊ณผ ๊ตฌ๋…์€ ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค. 

 

ํ•ญ์ƒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€