๋๊ธฐ๋ ํ์ฌ ์คํ ์ค์ธ ์ฝ๋๊ฐ ์๋ฃ๋ ํ์์ผ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐฉ์์
๋๋ค.
๋น๋๊ธฐ๋ ์ด์ ๋ฐ๋๋ก ํ์ฌ ์คํ ์ค์ธ ์ฝ๋์ ์๋ฃ ์ฌ๋ถ์ ๋ฌด๊ดํ๊ฒ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐฉ์์
๋๋ค.
์น ์ฑ์์๋ ์๋ฒ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์์ฒญํ ๋ค์,
์ฌ์ฉ์์ ์ธํฐํ์ด์ค๊ฐ ๋ฉ์ถ์ง ์๋๋ก ํ๊ณ ๋์์ ์ฌ๋ฌ ์์
์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ฝ๋ฐฑ ํจ์๋ ๋ค๋ฅธ ์ฝ๋์ ์ธ์๋ก ๋๊ฒจ์ฃผ๋ ํจ์์
๋๋ค.
์ฝ๋ฐฑ ํจ์๋ฅผ ์ธ์๋ก ๋๊ฒจ์ค์ผ๋ก์จ ๊ทธ ์ ์ด๊ถ๋ ํจ๊ป ์์ํ๋๋ฐ
์ฌ๊ธฐ์ ์ ์ด๊ถ์ด๋ ์ฝ๋ฐฑ ํจ์์ ํธ์ถ ์์ , ์ธ์, this๋ฅผ ๊ฒฐ์ ํ ๊ถ๋ฆฌ๋ฅผ ๋งํฉ๋๋ค.
์ฆ์ ํธ์ถ๋๋ ๊ฒ์ด ์๋๋ผ, ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ํน์ ์์
์ด ์๋ฃ๋ ํ
ํธ์ถ๋๋๋ก ์ง์ ํ ์ ์์ด์ ๋์ค์ ๋ถ๋ฌ๋ฌ๋ผ๋ ์๋ฏธ์์ call back์ด๋ผ ๋ช
๋ช
ํ์์ต๋๋ค.
์ฝ๋ฐฑ ์ง์ฅ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ต๋ช
์ผ๋ก ์ ๋ฌํ๋ ๊ณผ์ ์ด ๋ฐ๋ณต๋์ด
์ฝ๋์ ๋ค์ฌ์ฐ๊ธฐ ์์ค์ด ๊ฐ๋นํ๊ธฐ ํ๋ค ์ ๋๋ก ๊น์ด์ง๋ ํ์์ ์๋ฏธํฉ๋๋ค.
์ฃผ๋ก ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ ์๋ฒ ํต์ ๊ณผ ๊ฐ์ด ๋น๋๊ธฐ์ ์ธ ์์
์ ์ํํ๊ธฐ ์ํด ์ด๋ฐ ํํ๊ฐ ์์ฃผ ๋ฑ์ฅํ๋๋ฐ,
๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ณ ์ฝ๋๋ฅผ ์ ์ง๋ณด์ํ๊ธฐ ์ด๋ ต๊ฒ ํฉ๋๋ค.
promise
์ callback
์ ์ฐจ์ด๋ฅผ ์ค๋ช
ํด ์ฃผ์ธ์.callback ํจ์๋ ํน์ ์์
์ด ์๋ฃ๋ ํ ํธ์ถ๋๋ ํจ์์
๋๋ค.
๋น๋๊ธฐ ์์
์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ์์ผ๋ก, ์์
์ด ์๋ฃ๋๋ฉด ์ฝ๋ฐฑ ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค.
์ฌ๋ฌ ๋น๋๊ธฐ ์์
์ด ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ๋์ด์ผ ํ ๊ฒฝ์ฐ ์ฝ๋ฐฑ ์ง์ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋๋ฐ,
์ฝ๋ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋จ์ดํธ๋ฆฝ๋๋ค.
์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ES6์์ Promise๊ฐ ๋ฑ์ฅํ์์ต๋๋ค.
Promise๋ ๋น๋๊ธฐ ์์
์ ์ฑ๊ณต ๋๋ ์คํจ ์ฌ๋ถ๋ฅผ ์ถ์ํํ์ฌ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์
๋๋ค.
์ฝ๋ฐฑ ํจ์ ๋์ then, catch ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ๋น๋๊ธฐ ์์
์ด ์๋ฃ๋ ์ดํ์ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
์ด๋ฅผ ํตํด ์ฝ๋ฐฑ ์ง์ฅ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
promise
์ async-await
์ ์ฐจ์ด๋ฅผ ์ค๋ช
ํด ์ฃผ์ธ์.promise ์ then-catch์ ์ด์ฉํ์ฌ ์ฌ๋ฌ ๋น๋๊ธฐ ์์
์
์ฒด์ธ ํํ๋ก ์ฐ๊ฒฐํ์ฌ ์์ฐจ์ ์ผ๋ก ์คํํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ณต์กํ ๋น๋๊ธฐ ์์
์์ ์ฒด์ธ ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ง ์ ์์ผ๋ฉฐ ์ค๋ฅ ์ฒ๋ฆฌ๊ฐ ํ๋ญ๋๋ค.
๋ฐ๋ผ์ promise ๋ฅผ ๋ ์ง๊ด์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ES8์์ async-await ๋ฌธ๋ฒ์ด ๋ฑ์ฅํ์์ต๋๋ค.
๋น๋๊ธฐ ์์
์ ์ํํ๊ณ ์ ํ๋ ํจ์ ์์ async์ ํ๊ธฐํ๊ณ ,
ํจ์ ๋ด๋ถ์์ ์ค์ง์ ์ธ ๋น๋๊ธฐ ์์
์ด ํ์ํ ์์น๋ง๋ค await์ ํ๊ธฐํ๋ ๊ฒ๋ง์ผ๋ก
๋ค์ ๋ด์ฉ์ ์๋์ผ๋ก promise๋ก ์ ํํ๊ณ , ํด๋น ๋ด์ฉ์ด resolve๋ ์ดํ์์ผ ๋ค์์ผ๋ก ์งํํฉ๋๋ค.
async-await ์ ๋๊ธฐ์ ์ธ ์ฝ๋ ์คํ์ผ๋ก ์์ฑํ ์ ์๊ฒ ํด์ฃผ๋ฉฐ,
try-catch ๋ฌธ์ ํตํด ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ด ๊ฐ๋
์ฑ๊ณผ ์ ์ง ๋ณด์์ฑ์ด ๋ฐ์ด๋ฉ๋๋ค.
map
๊ณผ forEach
์ ์ฐจ์ด๋ฅผ ์ค๋ช
ํด ์ฃผ์ธ์. (โreduce
)map๊ณผ forEach ๋ชจ๋ ๋ฐฐ์ด์ ์ํํ์ฌ ๊ฐ ์์๋ง๋ค ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํ๋ ๊ฒ์ ๋์ผํฉ๋๋ค.
๊ทธ๋ฌ๋ map์ ์ฝ๋ฐฑ ํจ์์ return๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํ๊ณ ,
forEach๋ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํ์ง ์๊ณ ๊ทธ์ ์คํ๋ง ํฉ๋๋ค.
reduce๋ ๋ฐฐ์ด์ ๋ชจ๋ ์์์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ์ฉํ์ฌ ํ๋์ ๊ฒฐ๊ณผ ๊ฐ์ ์์ฑํ๋ ํจ์์
๋๋ค.
์ธ์๋ก๋ ๋์ ๊ฐ, ํ์ฌ ๊ฐ, ํ์ฌ ์ธ๋ฑ์ค ๋ฑ์ ๋ฐ๋๋ฐ ๋ฐฐ์ด์ ์์๋ค์ ํ๋๋ก ์ค์ฌ(reduce) ์ง๊ณํ ๊ฐ์ ๋ฐํํฉ๋๋ค.
var
, let
, const
์ ์ฐจ์ด๋ฅผ ์ค๋ช
ํด ์ฃผ์ธ์.์ฌ์ ์ธ | ์ฌํ ๋น | ์ค์ฝํ | |
---|---|---|---|
var | O | O | ํจ์ ๋จ์ |
let | X | O | ๋ธ๋ก ๋จ์ |
const | X | X | ๋ธ๋ก ๋จ์ |
์ผ๋ฐ ํจ์๋ ๋ฉ์๋๋ก์ ํธ์ถํ๋ฉด ํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ณด๋๋ก this ๋ฐ์ธ๋ฉ์ ํ๊ณ ,
ํจ์๋ก์ ํธ์ถํ๋ฉด this๊ฐ ์ ์ญ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
๊ทธ๋ฌ๋ ํ์ดํ ํจ์๋ ํธ์ถํ ๋ this ๋ฐ์ธ๋ฉ ๊ณผ์ ์์ฒด๊ฐ ๋น ์ง๊ฒ ๋์ด์
ํ์ดํ ํจ์ ๋ด์์ this์ ์ถ๋ ฅํ๋ฉด ์์ ์ค์ฝํ์ this๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
๋ฐ๋ผ์ ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด this๊ฐ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ๋ผ์ ๋ฐ์ํ๋ ํผ๋์ ์ค์ผ ์ ์์ต๋๋ค.
this
์ ์๋ฏธ๋ฅผ ์ค๋ช
ํด ์ฃผ์ธ์.this๋ ์์ ์ด ์ํ ๊ฐ์ฒด ํน์ ์์ ์ด ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ์๊ธฐ ์ฐธ์กฐ ๋ณ์์
๋๋ค.
ํจ์ ์ ์ธ๋ฌธ์ function ํค์๋๋ฅผ ํ์ฉํด์ ํจ์๋ฅผ ์ ์ํ๋ ๋ฐฉ์์ด๊ณ ,
ํจ์ ํํ์์ ๋ณ์์ ํจ์ ๋ฆฌํฐ๋ด์ ํ ๋นํ์ฌ ์ ์ํ๋ ๋ฐฉ์์
๋๋ค.
๋์ ์ฐจ์ด๋ ํธ์ด์คํ
์ฌ๋ถ์์ ๋ช
ํํ ๋๋ฌ๋ฉ๋๋ค.
ํจ์ ์ ์ธ๋ฌธ์ ๋ฐํ์ ์ด์ ์ ํธ์ด์คํ
๋์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํจ์๊ฐ ๋ฏธ๋ฆฌ ์ ์ฅ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ํจ์ ํํ์์ ๋ณ์๋ง ํธ์ด์คํ
๋๊ณ ํจ์ ์์ฒด๋ ํธ์ด์คํ
๋์ง ์๊ธฐ ๋๋ฌธ์
ํจ์ ํํ์ ๋ผ์ธ ์ด์ ์์ ํด๋น ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
ํธ์ด์คํ
์ โ๋์ด์ฌ๋ฆฐ๋คโ๋ผ๋ ์๋ฏธ๋ก,
ํจ์ ํน์ ๋ณ์ ์ ์ธ๋ฌธ์ด ์ฝ๋์ ์ต์์๋ก ๋์ด์ฌ๋ ค์ง๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์์ ์๋ฏธํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฝ๋ ์คํ ์ด์ ์ ํจ์์ ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ํ๋ณดํด๋ก๋๋ค.
์ด๋ฌํ ๋์์ด ๋ง์น ์ ์ธ๋ฌธ์ด ์ค์ฝํ์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง ๊ฒ ๊ฐ์์ โํธ์ด์คํ
โ์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
ํจ์ ์ ์ธ๋ฌธ์ด ํธ์ด์คํ
๋ ๋ ํจ์ ์ ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ์ง๋ง,
๋ณ์ ์ ์ธ๋ฌธ์ ๊ฐ์ด undefined๋ก ์ด๊ธฐํ๋ฉ๋๋ค.
์คํ ์ปจํ
์คํธ๋ ํจ์๊ฐ ์คํ๋๋ ์์ ์ ์์ฑ๋์ด ์ฝ ์คํ์ ์์
๋๋ค.
์ด ์คํ ์ปจํ
์คํธ๋ ํจ์์ ๋ํ ํ๊ฒฝ ์ ๋ณด๋ฅผ ๋ด์ ๊ฐ์ฒด์
๋๋ค.
์๋ณ์์ ๋ํ ์ ๋ณด๋ this, ์์ ์ค์ฝํ์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค.
๋ ์์ปฌ ํ๊ฒฝ์ ํ๊ฒฝ ๋ ์ฝ๋์ ์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ ์ฐธ์กฐ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๋ ์์ปฌ ํ๊ฒฝ์ ํ์ฌ ์คํ ์ค์ธ ์ฝ๋ ๋ธ๋ก์์์ ์๋ณ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด์
๋๋ค.
ํ๊ฒฝ ๋ ์ฝ๋์๋ ๋ณ์์ ํจ์ ์ ์ธ์ด ์ ์ฅ๋๋ฉฐ,
์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ ์ฐธ์กฐ๋ฅผ ํตํด ์์ ์ค์ฝํ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
์ค์ฝํ๋ ๋ณ์์ ์ ํจ ๋ฒ์๋ฅผ ๋งํฉ๋๋ค.
์ด๋ ํ ์ค์ฝํ ๋ด์์ ์ ์ธํ ๋ณ์๋ ์ค์ฝํ ๋ฐ์์๋ ์ ๊ทผํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์์ ์ค์ฝํ์์ ์ ์ธํ ๋ณ์๋ ํ์ ์ค์ฝํ์์ ์ฐธ์กฐํ ์ ์๋๋ฐ,
์ด๋ ๋จ๋ฐฉํฅ์ผ๋ก ์์ ์ค์ฝํ๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ก ์ฒด์ธ ํ์์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด๋ ํ ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ๊ณ ์ถ์ ๋,
์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด, ์์ ๋ณต์ฌ๋ ํ ๋จ๊ณ ๋ฐ์ ํ๋กํผํฐ๊น์ง ๋ณต์ฌํ๋ ๊ฒ์
๋๋ค.
๊น์ ๋ณต์ฌ๋ ๊ฐ์ฒด์ ๋ชจ๋ ์์ฑ์ ์ฌ๊ท์ ์ผ๋ก ๋ณต์ฌํ์ฌ ๋
๋ฆฝ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์
๋๋ค.
๋ง์ฝ ์ค์ฒฉ๋ ๊ฐ์ฒด๋ฅผ ์์ ๋ณต์ฌํ๋ฉด,
๋ด๋ถ ๊ฐ์ฒด ์์ฒด๋ฅผ ๋ณต์ฌํ๋ ๊ฒ ์๋๋ผ ๊ทธ ์ฐธ์กฐ๋ฅผ ๋ณต์ฌํ๊ธฐ ๋๋ฌธ์ ์๋ณธ ๊ฐ์ฒด๊ฐ ์์ค๋ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ค์ฒฉ๋ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ๋๋ ๊น์ ๋ณต์ฌ๋ฅผ ํ๋ฉด ์๋ณธ ๊ฐ์ฒด๊ฐ ์์ค๋์ง ์์ต๋๋ค.
spread
๋ฌธ๋ฒ๊ณผ rest
๋ฌธ๋ฒ์ ์ฐจ์ด์ ๋ํด ์ค๋ช
ํด ์ฃผ์ธ์.spread
๋ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด๋ฅผ ํผ์ณ์ ๊ฐ๋ณ ์์๋ก ๋ถํดํฉ๋๋ค.
const arr = [1, 2, 3];
console.log(...arr); // 1 2 3
rest
๋ ์ด์ ๋ฐ๋๋ก ์ฌ๋ฌ ๊ฐ์ ์ธ์ ํน์ ์์๋ฅผ ๋ฐฐ์ด๋ก ๋ฌถ์ต๋๋ค.
function foo(...args) { console.log(args); }
foo(1, 2, 3); // [1, 2, 3]
null
, undefined
์ ์ฐจ์ด์ ๋ํด ์ค๋ช
ํด ์ฃผ์ธ์. (โundeclared
)null๊ณผ undefined ๋ชจ๋ ๋น ๊ฐ์ ์๋ฏธํ๋ ๊ฑด ๋์ผํฉ๋๋ค.
๊ทธ๋ฌ๋ null์ ๋ณ์์ ๊ฐ์ด ์๋ค๋ ๊ฒ์ ๋๋ฌ๋ด๊ธฐ ์ํด ๊ฐ๋ฐ์๊ฐ ์๋์ ์ผ๋ก ํ ๋นํ๋ ๊ฐ์ด๋ฉฐ,
undefined๋ ์ ์ธ์ด ๋๊ณ ์ด๊ธฐํ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ํ ๋นํ๋ ๊ฐ์
๋๋ค.
๋ฐ๋ผ์ ๋ณ์์ undefined๊ฐ ํ ๋น๋์ด ์์ผ๋ฉด ์ด๊ธฐํ๋์ง ์์ ๋ณ์๋ผ๋ ์๋ฏธ๊ฐ ๋ ๊ฐํฉ๋๋ค.
undeclared ๋ ํด๋น ์ค์ฝํ ๋ด์์ ์ ๊ทผํ๋ ค ํ์ผ๋ ์ ์ธ์กฐ์ฐจ ๋์ง ์์ ์ํ๋ฅผ ๋งํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐ์ดํฐ ํ์ ์ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋ถ๋ฅ๋ฉ๋๋ค.
call
๊ณผ apply
์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?call๊ณผ apply ๋ชจ๋ ๋ช
์์ ์ผ๋ก this๋ฅผ ๋ฐ์ธ๋ฉํ๋ ๋ฉ์๋์์ ๋์ผํฉ๋๋ค.
call๊ณผ apply๋ ์ธ์๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์๋ง ๋ค๋ฆ
๋๋ค.
this
๋ก ๋ฐ์ธ๋ฉํ๊ณ ๋๋จธ์ง ๋ชจ๋ ์ธ์๋ค์ ํธ์ถํ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ํฉ๋๋ค.this
๋ก ๋ฐ์ธ๋ฉํ๊ณ ๋ ๋ฒ์งธ ์ธ์๋ฅผ ๋ฐฐ์ด๋ก ๋ฐ์ ๊ทธ ๋ฐฐ์ด์ ์์๋ค์ ํธ์ถํ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ง์ ํฉ๋๋ค.function.prototype.bind
์ ๋ํด ์ค๋ช
ํด ์ฃผ์ธ์.bind๋ call, apply์ ๋ฌ๋ฆฌ ์ฆ์ ํธ์ถํ์ง ์๊ณ ์ ๋ฌ๋ฐ์ this
์ ์ธ์๋ค์ ๋ฐํ์ผ๋ก ์๋ก์ด ํจ์๋ฅผ ๋ฐํํฉ๋๋ค.
var func = function (a, b, c, d) {
console.log(this, a, b, c, d);
};
var bindFunc = func.bind({ x: 1 }, 4, 5);
bindFunc(6, 7); // ์ถ๋ ฅ: {x: 1} 4 5 6 7
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ณ์์ ํ์
์ด ๊ณ ์ ๋์ง ์๊ณ ๋ฐํ์์ ํ์
์ด ๊ฒฐ์ ๋๋ฉฐ,
์คํ ์ค์ ๋ณ์์ ํ์
์ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ํ ๊ฐ์ฒด์ ์์ฑ์ ๋์ ์ผ๋ก ์ถ๊ฐ, ์ญ์ ํ ์ ์์ต๋๋ค.
๊น์ ๋ณต์ฌ๋ฅผ ํด์ ์๋ณต ๊ฐ์ฒด์ ์์ค์ ๋ง๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋ํ Immutable.js๋ Immer ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณต์กํ ๋ถ๋ณ์ฑ ๊ด๋ฆฌ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊น์ ๋ณต์ฌ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ๊ฑฐ๋,
๊ฐ์ฒด์ ์ํ๋ฅผ ๋ถ๋ณํ๊ฒ ์ ์งํ๋ฉด์ ์
๋ฐ์ดํธํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
==
๊ณผ ===
์ ์ฐจ์ด์ ์ ์ค๋ช
ํด ์ฃผ์ธ์.==์ ๋ ํผ์ฐ์ฐ์์ ํ์
์ด ๋ค๋ฅผ ๊ฒฝ์ฐ ์๋ฌต์ ์ผ๋ก ํ์
๋ณํํด์ ๊ฐ์ ๋น๊ตํ๊ณ ,
===์ ํ์
์ ๋ณํํ์ง ์๊ณ ๋ณด๋ค ๋ ์๊ฒฉํ๊ฒ ๋ ํผ์ฐ์ฐ์๋ฅผ ๋น๊ตํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋น ๋ฌธ์์ด์ธ โโ ์ 0์ ๋ ๋ค Falsy ๊ฐ์ด๊ธฐ ๋๋ฌธ์ false๋ก ์๋ฌต์ ํ ๋ณํ๋ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ๋ ๊ฐ์ == ์ฐ์ฐ์๋ฅผ ํตํด ๋น๊ตํ๋ฉด ์ฐธ์ผ๋ก ์ถ๋ ฅ๋ฉ๋๋ค.
ํ์ง๋ง === ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ๋น๊ตํ๋ฉด ๋ ํผ์ฐ์ฐ์๋ ์๊ฒฉํ ํ์
์ด ๋ค๋ฅด๋ฏ๋ก false๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
JavaScript๋ ์ฑ๊ธ ์ค๋ ๋๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ํ ๋ฒ์ ํ๋์ ์์
๋ง ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
โ ๋๊ธฐ
๋๊ธฐ ์์
์ ์ฝ ์คํ์์ ํ์ฌ ์คํ ์ค์ธ ํจ์๋ ์ฝ๋๋ฅผ ์๊ณ , ์ด ์คํ์ด ๋น์์ง ๋๊น์ง ์์
์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
โ ๋น๋๊ธฐ
์ฑ๊ธ ์ค๋ ๋์์ ์ด๋ฒคํธ ๋ฃจํ์ ์์
ํ๋ฅผ ํ์ฉํ์ฌ ์ฒ๋ฆฌ๋ฉ๋๋ค.
๋น๋๊ธฐ ์์
์ด๋, ์ด๋ค ์์
์ ๋ฐ๋ก ์๋ฃํ์ง ์๊ณ ๋์ค์ ์๋ฃ๋ ์์
์ ๋ฏธ๋ฆฌ ์์ฝํด๋๋ ๋ฐฉ์์
๋๋ค.
๋ํ์ ์ธ ์๋ก ๋คํธ์ํฌ ์์ฒญ์ด๋ ํ์ด๋จธ ํจ์(setTimeout) ๋ฑ์ด ์์ต๋๋ค.
[๋น๋๊ธฐ ์์
์ ์ฒ๋ฆฌ ๊ณผ์ ]
โ ๋น๋๊ธฐ ํจ์ ํธ์ถ
- ๋น๋๊ธฐ ์์
์ ์์ฒญํ๋ฉด, ํด๋น ์์
์ ์ฝ ์คํ์์ ๋น ์ ธ๋๊ฐ๊ณ , ๋ธ๋ผ์ฐ์ ๋๋ Node.js์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋ฉ๋๋ค.
- ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฝ ์คํ์ ๋น์ด์๋ ์ํ๋ก ๋ค์ ์์
์ ๊ณ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
โก ์์
์๋ฃ ๋ฐ ์ฝ๋ฐฑ
- ๋น๋๊ธฐ ์์
์ด ์๋ฃ๋๋ฉด, ๊ทธ ๊ฒฐ๊ณผ๋ ์์
ํ(Task Queue)์ ์ฝ๋ฐฑ ํํ๋ก ๋ค์ด๊ฐ๋๋ค.
โข ์ด๋ฒคํธ ๋ฃจํ
- ์ด๋ฒคํธ ๋ฃจํ๋ ์ฝ ์คํ์ด ๋น์ด ์๋์ง๋ฅผ ์ง์์ ์ผ๋ก ํ์ธํฉ๋๋ค.
- ์ฝ ์คํ์ด ๋น์ด ์๋ ๊ฒฝ์ฐ, ์์
ํ์ ์์ฌ ์๋ ์ฝ๋ฐฑ์ ์ฝ ์คํ์ผ๋ก ์ฎ๊ฒจ ์คํํฉ๋๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์ ์ค ํ๋๋ก,
๋ฐ์ดํฐ๋ฅผ ์ถ์ํ์์ผ ์ํ์ ํ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๊ทธ ๊ฐ์ฒด๋ค ๊ฐ์ ์ํธ์์ฉ์ ํตํด
๋ก์ง์ ๊ตฌ์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ์ด๋ค.
โ ์บก์ํ: ์ ๋ณด ์๋, ์ธ๋ถ๋ก๋ถํฐ ์ ๋ณด ์ ๊ทผ ์ ์ด
โก ์์: ์ด๋ฏธ ์ ์๋ ์์ ํด๋์ค์ ๋ชจ๋ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ํ์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ
โข ์ถ์ํ: ๊ฐ์ฒด๋ค ๊ฐ์ ๊ณตํต์ ์ธ ํน์ง์ ๋์ถ
โฃ ๋คํ์ฑ: ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๊ฐ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๋์(์ค๋ฒ๋ก๋ฉ, ์ค๋ฒ๋ผ์ด๋ฉ)
์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋คํธ์ํฌ ์์ฒญ์ด๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ, ํ์ด๋จธ์ ๊ฐ์ ์์ ์ ๋ฉํฐ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ด๋ฌํ ์์ ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์๋ ๋ธ๋ผ์ฐ์ ๋ด๋ถ์ ๋ฉํฐ ์ค๋ ๋์ธ Web APIs์์ ๋น๋๊ธฐ + ๋ ผ๋ธ๋กํน์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
์ฆ, ๋น๋๊ธฐ๋ก ๋์ํ๋ ํต์ฌ ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๊ฐ ์๋๋ผ ๋ธ๋ผ์ฐ์ ๋ผ๋ ์ํํธ์จ์ด๊ฐ ๊ฐ์ง๊ณ ์๋ค.
๋ฉ์ธ ์ค๋ ๋๊ฐ ์์
์ ๋ค๋ฅธ ๊ณณ์ ์์ฒญํ์ฌ ๋์ ์คํํ๊ณ , ๊ทธ ์์
์ด ์๋ฃ๋๋ฉด
์ด๋ฒคํธ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์คํํ๋ ๋ฐฉ์
์๋ฐ์คํฌ๋ฆฝํธ๋ 1995๋
์ ๋ท์ค์ผ์ดํ์์ ์น ๋ธ๋ผ์ฐ์ ์์ ๋์ ์ธ ์น ํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๊ฐ๋ฐ๋ ์คํฌ๋ฆฝํธ ์ธ์ด์ด๋ค.
๋น์์๋ ๋ฉํฐ ์ฝ์ด ํ๋ก์ธ์๊ฐ ๋ณดํธํ๋์ง ์์๊ณ ,
์๋ฐ์คํฌ๋ฆฝํธ๋ ์น ๋ธ๋ผ์ฐ์ ์์ ๊ฐ๋จํ ์คํฌ๋ฆฝํธ ๋์์ ์ํํ๋ ๋ฐ ์ฃผ๋ก ์ฌ์ฉ๋์๊ธฐ ๋๋ฌธ์
๋ณต์กํ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ์๋ก ํ์ง ์์, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ ๊ณ , ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํผํ ์ ์๋ ์ฑ๊ธ ์ค๋ ๋๋ก ๊ตฌํํ์๋ค.
๊ทธ๋ฌ๋ ์ฑ๊ธ ์ค๋ ๋๋ ์ค๋ ๊ฑธ๋ฆฌ๋ ์์
์ด ์คํ๋๋ฉด ๋ค๋ฅธ ์์
๋ค์ด ๋๊ธฐํด์ผ ํ๋ฏ๋ก ์๋ต์ฑ์ด ๋จ์ด์ง๋ค.
๋ํ CPU ์ฝ์ด๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ฑ๋ฅ์ด ์ ํ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด ์ธ์ด ์์ฒด์ ์ค๊ณ๋ฅผ ๋ฐ๊พธ๋ ๊ฒ ๋ณด๋จ,
๋ธ๋ผ์ฐ์ ์ ๋ฉํฐ ์ค๋ ๋๋ฅผ ์ด์ฉํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ์ด ์ด๋ฒคํธ ๋ฃจํ์ด๋ค.
ํด๋ก์ ๋ ํจ์์ ๋ ์์ปฌ ์ค์ฝํ๋ฅผ ๊ธฐ์ตํ์ฌ ํจ์๊ฐ ๋ ์์ปฌ ์ค์ฝํ ๋ฐ์์ ์คํ๋ ๋๋
๊ทธ ์ค์ฝํ์ ์ ๊ทผํ ์ ์๋ ํจ์๋ฅผ ์๋ฏธํ๋ค.
ํด๋ก์ ๋ ์ฃผ๋ก ์บก์ํ์ ์ ๋ณด ์๋์ ์ํด ์ฌ์ฉํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ํ๋กํ ํ์
๊ธฐ๋ฐ ์ธ์ด์ด๋ฉฐ ํ๋กํ ํ์
์ ๊ฐ์ฒด์ ์ํ์ ์๋ฏธํ๋ค.
๋ชจ๋ ๊ฐ์ฒด๋ ํ๋กํ ํ์
๊ฐ์ฒด์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ ํ๋กํ ํ์
๊ฐ์ฒด๋ก๋ถํฐ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์์๋ฐ๋๋ค.
์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ ์์ ์ ๋ถ๋ชจ ์ญํ ์ ํ๋ ํ๋กํ ํ์
๊ฐ์ฒด์ ์ฐ๊ฒฐ๋์ด ์๋ค.
์ด๋ ํ ๊ฐ์ฒด๊ฐ ํ๋กํผํฐ์ ์ ๊ทผํ๋ ค๊ณ ํ ๋,
ํด๋น ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด __proto__๊ฐ ๊ฐ๋ฆฌํค๋ ๋งํฌ๋ฅผ ๋ฐ๋ผ
์์ ์ ๋ถ๋ชจ ์ญํ ์ ํ๋ ํ๋กํ ํ์
๊ฐ์ฒด์์ ์์ฐจ์ ์ผ๋ก ๊ฒ์ํ๋ค.
๋ชจ๋ ํ๋กํ ํ์
์ฒด์ด๋์ ์ข
์ ์ Object.prototype์ด๋ค.
constructor
, prototype
, instance
์ ๊ด๊ณ์ ๋ํด ์ค๋ช
ํด ์ฃผ์ธ์.์์ฑ์ ํจ์(constructor)๋ฅผ ํตํด ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด ํด๋น ์ธ์คํด์ค๋ __proto__๋ผ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ๋๋ค.
__proto__๋ ์์ฑ์ ํจ์์ ํ๋กํผํฐ์ธ prototype ๊ฐ์ฒด๋ฅผ ๊ทธ๋๋ก ์ฐธ์กฐํ๋ค.
prototype์ ๋ถ๋ชจ ์ญํ ์ ํ๋ ๊ฐ์ฒด๋ก์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ํด๋น ๊ฐ์ฒด์๊ฒ ์์ํ๋ค.
ํ๋กํ ํ์
๋ฉค๋ฒ๋ ์ธ์คํด์ค์์ ์์ ์ด ์์๋ฐ์ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋ฌ๋ ์คํํฑ ๋ฉค๋ฒ๋ ์ธ์คํด์ค์์ ์ง์ ํธ์ถํ ์ ์์ผ๋ฉฐ
์์ฑ์ ํจ์ ์์ฒด๋ฅผ this๋ก ๋ฐ์ธ๋ฉํ์ฌ ํธ์ถํ ์ ์๋ค.
๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์ฑ์ ํด์ฒดํ์ฌ ๊ทธ ๊ฐ์ ๊ฐ๋ณ ๋ณ์์ ๋ด์ ์ ์๊ฒ ํ๋ JavaScript ํํ์์ด๋ค.
let a, b, rest;
[a, b] = [10, 20];
console.log(a); // 10
console.log(b); // 20
[a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(rest); // [30, 40, 50]