TIL - 21.07.02 ๐จโ๐ป - JS
TIL - 21.07.02 ๐จโ๐ป
Spread syntax ( ์ ๊ฐ ๊ตฌ๋ฌธ )
๋ฐฐ์ด์์์ ์ ๊ฐ ๊ตฌ๋ฌธ
๋ฐฐ์ด์ ์๋ ์์๋ฅผ ๋ฐฐ์ด ๋ช
์์ ์ ์ธ๊ฐ ๋ถํ๋ ๊ฒ์ผ๋ก ๋ฌธ์์ด๋ก ํธ์ถํ๋ค.
๋ฐฐ์ด๋ผ๋ฆฌ ํฉ์น๊ฑฐ๋ ๋ฐฐ์ด๊น์ง ๋ณต์ฌํ๋๋ฐ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ณต์ฌํ๊ฑฐ๋ ํฉ์ณ์ง ๋ฐฐ์ด๋ค์ ์์ ๋ณต์ฌ๊ฐ ๋๋ฉฐ ์ ๊ฐ ๊ตฌ๋ฌธ์ ์ ๋ฐฐ์ด์ ์ํฅ์ด ๊ฐ์ง ์๋ Immutableํ ๋ฌธ๋ฒ์ด๋ค.
- ๊น์ ๋ณต์ฌ์ ์์ ๋ณต์ฌ๋ ์ฐจํ OiMW๋ก ์ ๋ฆฌํ๊ฒ ๋ค.
// ๋ฐฐ์ด ํฉ์น๊ธฐ ์์ let a = [1, 2, 3]; let b = [4, 5, 6]; let ab = [...a, ...b]; let ba = [...b, ...a]; console.log(ab) // [1, 2, 3, 4, 5, 6]; console.log(ba) // [4, 5, 6, 1, 2, 3]; // ๋ฐฐ์ด ๋ณต์ฌ ์์ let a = [1 ,2 ,3] let b = [..a] // a.slice()์ ๋น์ทํ๋ค. b.pop(); // 3; console.log(b) // [1, 2] console.log(a) // [1, 2, 3]; ๋ฐฐ์ด b์ ์์๊ฐ ์์ ๋์์ง๋ง ์ ๋ฐฐ์ด a์ ์์๋ ๋ณํจ์ด ์๋ค. // ๋ค๋ง ์์ ๋ณต์ฌ(shallow copy)์ด๊ธฐ์ ๋ฐฐ์ด์ ์์๋ก ๊ฐ์ฒด, ๋ฐฐ์ด๋ฑ์ด ์ฌ๋ // ๊ทธ ํด๋น ์์๋ค์๋ ํด๋น ์์์ ๋ฐ์ดํฐ๊ฐ ์๋ Heap์ ์ฃผ์๋ง ์ ์ฅ๋๋ค.
๊ฐ์ฒด์์์ ์ ๊ฐ๊ตฌ๋ฌธ
๋ฐฐ์ด์์์ ๊ฒฝ์ฐ์ ์ ์ฌํ๊ฒ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๊ฑฐ๋ ๋ณต์์ ๊ฐ์ฒด๋ฅผ ํฉ์น ๋ ์ฌ์ฉํ๋ค.
๋ค๋ง ๋ณต์ฌ์ ๊ฒฝ์ฐ๋ ๋ฐฐ์ด๊ณผ ๋น์ทํ์ง๋ง, ๋ณต์ฌํ ๋๋ ์กฐ๊ธ ๋ค๋ฅด๋ค.
๊ฐ์ ํ๋กํผํฐ ํค๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ผ๋ฆฌ ํฉ์น ๋๊ฐ ๋ค๋ฅธ๋ฐ, ์ด ๊ฒฝ์ฐ๋ ๋ฆ๊ฒ ์
๋ ฅํ ๊ฐ์ฒด์ ํ๋กํผํฐ ๋ฐธ๋ฅ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๊ฐ ๋ฐํ๋๋ค.
// ๊ฐ์ฒด ํฉ์น๊ธฐ ์์ let a ={ name: 'sunghoon', job: 'officer', }; let b ={ job: 'dev' age: 26; }; let c = {...a, ...b}; console.log(c) // { name: 'sunghoon', job: 'dev', age: 26 } // ํ๋กํผํฐ ํค๊ฐ job์ธ ํ๋กํผํฐ์ ๊ฐ์ด officer์์ dev๋ก ๋ฐ๋์๋ค. // ๊ฐ์ฒด ๋ณต์ฌ ์์ let a ={ name: 'sunghoon', job: 'dev', }; let b = { ...a } delete b.job; console.log(b) // { name: 'sunghoon' } console.log(a) // { name: 'sunghoon', job: 'dev' } // ๋ณต์ฌํ ๊ฐ์ฒด์ธ b์ ํ๋กํผํฐ๊ฐ ์์ ๋์์ง๋ง ์ ๊ฐ์ฒด์ธ a์ ํ๋กํผํฐ์ ๋ณ๊ฒฝ์ ์๋ค.
Rest ํ๋ผ๋ฏธํฐ
rest ํ๋ผ๋ฏธํฐ๋ ์ ํด์ง์ง ์์ ์์ ์์๋ฅผ ๊ฐ์ง ์ธ์๋ฅผ ๋ฐฐ์ด๋ก ๋ํ๋ผ ์ ์๊ฒ ํด์ค๋ค.
์ฝ๊ฒ ๋งํด์ ๋งค๊ฐ ๋ณ์๋ฅผ ๋ฐฐ์ด ํํ๋ก ๋ฐ์์ ์ฌ์ฉ๊ฐ๋ฅํ๊ณ ๋งค๊ฐ ๋ณ์์ ๊ฐฏ์๊ฐ ๊ฐ๋ณ์ ์ผ๋ ์ฌ์ฉํ ์ ์๋ค.
๋จ, rest ํ๋ผ๋ฏธํฐ ์ดํ์๋ ๋ค๋ฅธ ๋งค๊ฐ ๋ณ์๋ ํธ๋ ์ผ๋ง ์ฝค๋ง๊ฐ ์ฌ ์ ์๋ค.
์
๋ ฅ๋ ์ธ์๊ฐ ์ ์ด rest ํ๋ผ๋ฏธํฐ์ ํ ๋น๋์ง ๋ชปํ๋ฉด ๋น ๋ฐฐ์ด์ด ๋ฐํ๋๋ค.
const favFruit = function(fruit1, fruit2, ...fruits) { console.log('My favorite fruit is ' + fruit1) console.log('and I also like ' + fruit2) console.log('and there\'s ' + fruits.length + ' more fruits that I like') console.log(fruits) } favFruit('grape', 'melon', 'peach', 'apple', 'pineapple') // My favorite fruit is grape; // and I also like melon; // and there's 3 more fruits that I like // ['peach', 'apple', 'pineapple']; // ๋๋จธ์ง ์ธ์๋ค์ด ๋ฐฐ์ด์ ํํ๋ก ํ ๋น๋์๋ค.
๊ตฌ์กฐ ๋ถํด ํ ๋น
๊ตฌ์กฐ ๋ถํด ํ ๋น์ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์ฑ์ ํด์ฒดํด ๊ทธ ๊ฐ์ ๊ฐ๋ณ ๋ณ์์ ๋ด์ ์ ์๊ฒ ํ๋ JavaScript์ ํํ์์ด๋ค.
๋ฐฐ์ด์ด๋ ๊ฐ์ฒด๋ฅผ ๋ถํดํ ๋ rest ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํ ์ ์๋ค.
// ๋ฐฐ์ด์ ๊ฒฝ์ฐ const [a, b, ...c] = [1, 2, 3, 4, 5] console.log(a) // 1; console.log(b) // 2; a,b๋ ์ซ์์ด์ด๋ค. console.log(c) // [3, 4, 5] // ๊ฐ์ฒด์ ๊ฒฝ์ฐ const {a, b, ...c} = {a:1, b:2, c:3, d:4, e:5} console.log(a) // 1; console.log(b) // 2; a,b๋ ์ซ์์ด์ด๋ค. console.log(c) // { c:3, d:4, e:5} // ํจ์ ์ฌ์ฉ ์์ function orderBurger({kindOf, sauce, topping,}){ console.log(`${sauce}์์ค์ ${topping}์ด/๊ฐ ์ถ๊ฐ๋ ${kindOf}๋ฒ๊ฑฐ๊ฐ ์ฃผ๋ฌธ๋์์ต๋๋ค.`) } let iWant = { kindOf: 'ํต์์ฐ', sauce: 'ํซ์ผ์ฒฉ', bread: '์ฐธ๊นจ๋นต', topping: '์น์ฆ', } orderBurger(iWant); // ํซ์ผ์ฒฉ์์ค์ ์น์ฆ์ด/๊ฐ ์ถ๊ฐ๋ ํต์์ฐ๋ฒ๊ฑฐ๊ฐ ์ฃผ๋ฌธ๋์์ต๋๋ค.; // ๊ฐ์ฒด(iWant)์ ํ๋กํผํฐ์ค ํจ์์ ๋งค๊ฐ ๊ฐ์ฒด์ ์๋ ๋ณ์์ ์ผ์นํ์ง ์๋๊ฒ ์์ผ๋ฉด // ๊ทธ๋ฅ ๋ฌด์ํ๊ณ ์๋ ๊ฒ๋ค๋ง ์ฐพ์์ ํจ์๊ฐ ์คํ๋๋ค.
Shorthand notation ( ๋จ์ถ ํ๊ธฐ๋ฒ )
๋จ์ถ ํ๊ธฐ๋ฒ์ ์ ์ญ์ ์ ์ธ๋๊ณ ํ ๋น๋ ๋ณ์๊ฐ ์๋ ์ํ์์ ๊ฐ์ฒด๋ฆฌํฐ๋ด์์ ํด๋น ๋ณ์๊ฐ ํค๋ก ์์ผ๋ฉด ์ ์ญ ๋ณ์๋ฅผ ๊ฐ์ ธ์์ ๋ฒจ๋ฅ์ผ๋ ๊ฒ์ด๋ค.
let name = 'sunghoon' let planet = { name, age: 26, } console.log(planet) // { name: 'sunghoon', age: 26 }
Koans ํ๋ฉฐ ์์๋ธ ๊ฒ
- ์ฌ์น์ฐ์ฐ ์ค + ๋ฅผ ์ ์ธํ๊ณ ๋๋จธ์ง๋ ๊ฐ์ ํญ์ ์ซ์์ด๋ก ๋ฐํํ๋ค.
- ๋ถ๋ฆฌ์ธ ํ์ ๊ณผ ์ซ์์ด์ ๊ณ์ฐํ๋ฉด true๋ 1, false๋ 0์ผ๋ก ๋ํด์ง๋ค.
- ํ์ดํ ํจ์๋ ํจ์ ๋ด ์์ ์ this๊ฐ ์๊ธฐ์ ํจ์ ๋ฐ๋ก ๋ฐ์์ this๋ฅผ ์ฐพ๋๋ค.
- ๊ฐ์ฒด๋ผ๋ฆฌ ํฉ์น ๋ Object.assign(obj1, obj2)๋ฅผ ์ด์ฉํ์.
GOOD ๐
์ ๊ฐ ๊ตฌ๋ฌธ๊ณผ rest ํ๋ผ๋ฏธํฐ๋ฅผ ์ตํ๋ค.
ํ์ด๋ถ๊ณผ Koans๋ฅผ ํ๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณด๋ค ์นํด์ก๋ค.
BAD ๐ฅ
Koans๋ฅผ ํ๋ฉฐ ๋ณต์ต์ด ์ค์ํ๋ค๋๊ฑธ ๋ค์ ํ๋ฒ ๊นจ๋ฌ์๋ค.
TO DO ๐ฅ
- ๊ฐ์ฒด ๊น์ ๋ณต์ฌ, ์์ ๋ณต์ฌ
- DOM ๊ตฌ์กฐ
- ์ด๋ฒคํธ ๊ฐ์ฒด
- ๊ณ ์ฐจ ํจ์
- React
Retrospect ๐ง
๋ฒ์จ ํ ์ฃผ๊ฐ ํ์ฉ ์ง๋ฌ๋ค.
์์ทจ ๋๋ฌธ์ ์ํํจํด์ด ์์ ํ ๋ง๊ฐ์ง๊ณ ์ ์ ์์ด ๊ณต๋ถํ๋ค ๋ณด๋ ๋ฒ์จ ๊ธ์์ผ์ด๋ผ๋.
์ญ์ ๋ญ๊ฐ์ ์ง์คํ๊ณ ์์ผ๋ฉด ์๊ฐ์ ๊ธ๋ฐฉ๊ธ๋ฐฉ ํ๋ฌ๊ฐ๋ ๊ฒ ๊ฐ๋ค.
์์ํ์ง ์ผ๋ง ์๋ ๊ฒ ๊ฐ์๋ฐ ๋ฒ์จ 2์ฃผ ์กฐ๊ธ ์๋๋ ์๊ฐ ํ์๋ ์ฒซ๋ฒ์งธ HA์ ๋ง๋ถ๊ฒ ์๊ฒผ๋ค.
๊ฐํด์ ธ์ ์ฝ๊ฒ ๋๋ ค ๋ํ ์ ์๊ธธ ๊ณ ๋ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ค๋์ ๊ธ์์ผ์ด๊ณ ๋ญ๊ฐ ๊ทธ๋ฅ ๋ณด๋ด๊ธฐ ์์ฌ์ฐ๋ ๋งฅ์ฃผ ํ ์ ํ๋ฉฐ ๋ง์ง๋ง์ ์ฅ์ํ๋๊ฑธ๋ก.
์์
Reference ๐
https://developer.mozilla.org/
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(TIL - 21.07.02 ๐จโ๐ป - JS), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@planethoon/TIL-21.07.02์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค