์์ํ๋ฉฐ
์ด๋ฒ์ ์บกํดํ๊ต๋์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌด๋ฃ๊ฐ์๊ฐ ์๋ก ์คํ๋๋ค.
์ฌ์ค ์บกํดํ๊ต๋ ๊ฐ์ ์คํ ์์์, ๊ฐ์ธ์ ์ผ๋ก ์ข์ํ๊ณ ์กด๊ฒฝํ๋ ๊ฐ๋ฐ์ ์ ๋ฅด๋ง๋ฌด๋์ ํตํด ์๊ฒ๋์๋๋ฐ
์ดํ ๊ฐ์ธ์ ์ผ๋ก TS๋ฅผ ๊ณต๋ถํ ์ผ์ด ์๊ฒจ์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์๋ฅผ ๋ฃ๊ฒ ๋์๋ค.
๊ธฐ์ด๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ ์ง์ด์ฃผ์๊ธฐ๋ ํ๊ณ , Swift์๋ ๋ง์ด ์ ์ฌํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฒผ์ด ๋ง์์ผ๋ก ๋ค์ ์ ์์๋ค.
๋ฃ๋ค๋ณด๋ ํ ์ดํ, ์์๊ฐ์ ์๊ฐ!ํ๊ฒ ๋๋ค. ์ฝ๊ณ ๊ฐ๋ณ๊ฒ ์ค๋ช ํด์ฃผ์๊ณ ๊ฐ์ ๊ต์์ด ์น์ฌ์ดํธ๋ก ๋ฐ๋ก ์ ๋ฆฌ๋์ด ์์ด์ ๊ณต๋ถํ๋ฉฐ ๋ฃ๊ธฐ ์ข์๋ค.
์ธํ๋ฐ์์๋ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์ ๊ณต๋ถ๋ ธํธ๋ฅผ ํ์ฐจ๋ง๋ค ์ ๋ฆฌํ ์ ์๋๋ฐ, ์ ๋ฆฌํ๋ค๋ณด๋ ๋ ธํธ๊ฐ ์ฝ 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๊ธ ํจ์๋ก์์ ํน์ฑ.
- ์ฐธ๊ณ ๋งํฌ
MDN: First Class Function
๋๋ฌธ์ ํจ์์ ์ธ์๋ก๋ ์ฌ์ฉ์ด ๋ ์ ์๋ค.
function ํจ์(์ธ์) {
์ธ์();
}
ํจ์(function() {
console.log('์ผ๊ธํจ์');
});
ํ์ดํ ํจ์์ ์ถ์ฝ ๋ฌธ๋ฒ
var annonymous = () => { console.log('hi, i\`m annonymous.'); }
- ๋ฐํ๋ฌธ ํ๋๋ง ํจ์๋ณธ๋ฌธ์ ์์ ๊ฒฝ์ฐ {} ์ค๊ดํธ๋ฅผ ์๋ตํ ์ ์๋ค.
() => 10+20; // {} ์ ์ ์
- ์ ๋ฌ์ธ์๊ฐ ํ๋์ผ ๊ฒฝ์ฐ () ์๊ดํธ๋ฅผ ์๋ผํ ์ ์๋ค.
let a = num => { return num * 10; }
- 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) });
ํจ์์ ๋๊ธธ๋ ๋ฐฐ์ด์ ๊ฐ์ ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ์ ๊ทผํ ์ ์๋ค. ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ธํ๊ฒ ํ๊ฒ ๋๋ฉด ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ์ ๊ทผํ ์ ์๋ค.
- ์ฐธ๊ณ ๋ฌธ์
MDN: ๋ฐฐ์ด์ ๋ฐ๋ณต๋ฌธ
๋ฐฐ์ด์ ๋๋ค๋ฅธ ์ฃผ์ 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)๋ผ๋ ๊ฐ๋ ์ ๋์ ํ์ฌ ํน์ ์์ ์ด ์๋ฃ๋๊ธฐ๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์ ์ ๋์์ ์ํํ ์ ์๋๋ก ํ์๋ค.
- ์ฐธ๊ณ : inpa dev tistory
๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฐฉ์ 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์ ์ฐ๋ ๊ฒ์ด ์ข๋ค.
- ์๋ฌ์ฒ๋ฆฌ์ ๋ํ ๋ฒ๊ฑฐ๋ก์
๊ธฐ์กด ์ฝ๋์์ ์ฝ๋์ ์๋ฌ๊ฐ ๋ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ๋ ๊น?
์๋ฌ ๊ฐ์ ์ฝ๋ฐฑ์ ์ธ์๋ก ๋ฃ์ด์ฃผ๊ณ ์๋ฌ๊ฐ์ด ์์ ๊ฒฝ์ฐ ๋์์ ํ๋ ๋ฑ ์ถ๊ฐ์ ์ธ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค.
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;
});
});
- ์ฝ๋ฐฑ ์ง์ฅ Callback Hell
๋ฌ๊ฐ ํ๋์ ์ฝ๋ฐฑํจ์๋ฅผ ์ฒ๋ฆฌํ ๋ ๋ฌธ์ ๊ฐ ์์ด๋ณด์ฌ์ง์ง๋ง ์ฝ๋ฐฑํจ์๊ฐ ์ฌ๋ฌ๊ฐ ๊ฒน์ณ์ง๋ ๊ฒฝ์ฐ์๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
์ฝ๋ฐฑ ์์ ๊ณ์ ์ฝ๋ฐฑ, ์ฝ๋ฐฑ์ผ๋ก ์ด์ด์ง๋ ๊ฒ์ ์ฝ๋ฐฑ ์ง์ฅ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ด ๊ฒฝ์ฐ ์ด๋ ์ง์ ์ ์ด๋ค ์๋ฌ์ฒ๋ฆฌ๋ฅผ ํด์ผ๋๋์ง ์ฝ๋ ๋ถ๊ธฐ๊ฐ ๋ณต์กํด์ง๋ค.
๋น๋๊ธฐ์ฒ๋ฆฌ: 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();
์ค๋๋ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๊ถ๊ธํ๊ฑฐ๋ ๋๋๊ณ ์ถ์ ์๊ธฐ๊ฐ ์์ผ์๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
์ฌ๋ฐ๊ฒ ์ฝ์ผ์ จ๋ค๋ฉด ๊ณต๊ฐ๊ณผ ๊ตฌ๋ ์ ํฐ ํ์ด ๋ฉ๋๋ค.
ํญ์ ๊ฐ์ฌํฉ๋๋ค.
'๐ป Programming ๊ฐ๋ฐ > ๐ Javascript, Typescript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก ํธ์๋ 101 - 10+๋ ์ฐจ ํ๋ก ํธ์๋ ์์ง๋์ด ์น๊ตฌ์๊ฒ ๋ค์๋ ๊ธฐ์ด ๋ด์ฉ ์ ๋ฆฌ (0) | 2024.11.23 |
---|
๋๊ธ