๋ ธ๋?
๐๐ป ๋น๋๊ธฐ(Asynchronous) ์ด๋ฒคํธ-๊ธฐ๋ฐ(event-driven) Javascript ๋ฐํ์ ํ๊ฒฝ
์๋์ด ์์ ๋๋ก ์๋ฅผ ๋ค์ด๋ณด์.
๋๊ธฐ
๐๐ป ์ปคํผ๋ฅผ ๋ด๋ฆฐ๋ค ๐๐ป ์ฒญ์๋ฅผ ํ๋ค ๐๐ป ๋นจ๋๋ฅผ ํ๋ค
๋น๋๊ธฐ
๐๐ป ์ปคํผ๋ฅผ ๋ด๋ฆฌ๋ฉด์ ์ฒญ์๋ ํ ์ ์๊ณ ๋นจ๋๋ ํ ์ ์๋ค
๐๐ป ๋ฌด์ธ๊ฐ ๋์์ฃผ๋ ์กด์ฌ๊ฐ ์๋ค.
๐๐ป ๋ด๊ฐ, ํน์ ๋ค๋ฅธ ์กด์ฌ๊ฐ ์ผ์ด ๋๋ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ค.
๋ง์ฝ ๋๊ธฐ ํจ์์ ๋ํ ์์๋ฅผ ๋ค์๋ฉด
'๋'๋ผ๋ ๊ฐ์ฒด๋ ํจ์๋ค์ ๊ฐ์ง๋ค.
laundy๋ผ๋ ํจ์๋ฅผ ์ฐ์ ์ผ๋ก ์คํํ๋ฉฐ, while ๋ฌธ์ ๋ค ๋๋ด๊ณ ๋์ ์ฐจ๋ก๋๋ก ๋ค์ ํจ์๋ค์ ์คํํ๋ค.
์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
๐๐ป
๋น๋๊ธฐ ํจ์๋ก ์์๋ฅผ ๋ค์๋ฉด,
promise ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๋ฉฐ, ์ธ์๋ก resolve, reject๋ฅผ ๊ฐ์ง๋ค.
์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
๐๐ป
intervalId๋ฅผ const๋ก ์ ์ธํ ์ด์ ๋? -> ๋ฐ๋ ์ผ์ด ์๊ธฐ ๋๋ฌธ
ํน์ํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ let์ผ๋ก ๋ณ์๋ฅผ ์ ์ ์ธํ์ง ์๋๋ค.
ํ๋ฒ ์ ์ธํ ๊ฐ์ ์ ๋ฐ๊พธ์ง ์๋๋ก ํ๋ก๊ทธ๋๋ฐ ํ๋ ๊ฒ์ด ์ข๊ธฐ ๋๋ฌธ
fetch ํจ์ -> ๋น๋๊ธฐ์ ์ผ์ ํ๋ค.
then, async, await๋ฅผ ๊ฑธ์ด์ฃผ์ง ์์ผ๋ฉด ํ๋ก๊ทธ๋จ์ด ์ฃฝ๋๋ค.
๐๐ป ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค์ง ๋ชปํ๊ธฐ ๋๋ฌธ!/promise ๊ฐ์ฒด๊ฐ resolve ๋์ง ์์๊ธฐ ๋๋ฌธ!
then, async, await๋ฅผ ๊ฑธ์ด์ฃผ๋ฉด ๋น๋๊ธฐ ์์
์ด ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ค๋ ๋ป!
๐๐ป
๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋, ๋๊ธฐ์ ์ผ๋ก ์์
์ ์ํํ๋ค๋ฉด
ํด๋น ์์
์ด ๋๋ ๋ ๊น์ง ๋ฌด์ํ ๋ง์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ตํ์ง ๋ชปํ๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ node์ ๋น๋๊ธฐ์ ๊ฐ๋ ์ด ๋์ ๋ ๊ฒ!
๋น๋๊ธฐ๋ก ์์
ํ๋ ค๋ฉด ์ญํ ์ด ๋ฌด์กฐ๊ฑด ๋๋์ด์ ธ ์์ด์ผ ํ๋ค. node์์ ์ผ์ ๋๋์ด์ ํด์ฃผ๋ ๊ทธ ๋ถ๋ถ์ ์ด๋์ผ๊น?
๐๐ป Internal C++ thread pool
๐๐ป C++๋ก ์ง์ฌ์ง, ์ผ์ ๋์ ํด์ฃผ๋ ์กด์ฌ๊ฐ ์์ด์ ๋น๋๊ธฐ์ ์์
์ด ๊ฐ๋ฅํด์ง ๊ฒ!
์ด๋ฒคํธ์ ๊ธฐ๋ฐํ(event-driven : ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๊ธฐ๋ฐํ), ํ ์์ ์ ์ฌ๋ฌ ์์ฒญ์ ์ํํ ์ ์๊ฒ ๋๋ค.
๐๐ป ๋
ธ๋์ ์ฑ๊ธ ์ค๋ ๋๋ ์ฌ๋ฌ ์์ฒญ์ ํ ์์ ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋๋ ๊ฒ!(C++ ์ฐ๋ ๋ ํ์ด ์์์ด ๋ง์ด ๋๋ ์ผ์ ๊ฐ๋นํ๊ธฐ ๋๋ฌธ์ ๋
ธ๋์ ์ฑ๊ธ ์ค๋ ๋๋ ๋ฐฉํด๋ฅผ ๋ฐ์ง ์์)
์ ๊น, JS์์ callback์ ์ ํํ ์ด๋ค ์ญํ ์ ํ๋์?
๐๐ป ํ๋ง๋๋ก, ํจ์์ ๋๋ค.
๊ฐ ํจ์๋ค์ด ์ธ์๋ก ์ฝ๋ฐฑํจ์๋ฅผ ๋ฐ์, ๋ด๊ฐ ์ํ๋ ์์ ์ ํด๋น ํจ์๋ฅผ ๋ฐ๋๋ก ํ ์ ์์ต๋๋ค.๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ฌ์ฉ๋๋ ํจ์์ด๋ค.
javascript๋ฅผ chrome V8 ์์ง์ผ๋ก ํ๋ฒ ๋ ๊ฐ์ธ์ฃผ๋ฉด์,
javascript๋ ํฐ๋ฏธ๋ ํ๊ฒฝ์์ ๋๋ ค๋ณผ ์ ์๊ฒ ๋์๋ค.
- ์ ํจ์ ์์ ํจ์๋ฅผ ๋ฃ๋์?
๋ฐ์ฝ๋ ์ดํฐ์ ์ญํ ์?
ํจ์๊ฐ ์คํ๋๊ธฐ ์ ์, ์ ํ๋์ด ์คํ๋๋๋ก ํ๊ธฐ ์ํจ!
JS ์์๋ ํจ์๋ ํ๋์ ๊ฐ์ด๋ค.
JS ๋ฟ๋ง์ด ์๋, ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋๊ฐ.
์ํ๋ ์์ ์ ํจ์๊ฐ ์คํ๋๋๋ก ํ๊ธฐ ์ํด์์ผ.
const sumAndMultiply = (sum) => (multiply) => (a, b) => {
const sum = add(a, b)
const result = multiply(a, b)
return [sum, result]
}
๋ํ๋ ํจ์, ๊ณฑํ๋ ํจ์, ๋ํ๊ณ ๊ณฑํ ์ธ์๋ฅผ ์ฐจ๋ก๋ก ๋ฐ๋ sumAndMultiply ํจ์๊ฐ ์๋ค.
ํจ์๋ฅผ ์คํ์ํค๋ ์ค๊ดํธ๋ฅผ ๋ง๋๊ธฐ ์ ๊น์ง, ํจ์๋ ์คํ๋ ์ ์ด ์๋ค.
์ธ์๋ก ํจ์๋ง์ ๋ฃ์ด์ค์ ํจ์๋ฅผ ๋ฆฌํดํ๊ณ ์๊ธฐ ๋๋ฌธ.
a, b๊ฐ ์ธ์๋ก ๋ค์ด๊ฐ ์๊ฐ์์์ผ ๊ณ์ฐ์ด ๋๋ค.
๋ฐฐ์ด ๊ตฌ์กฐ๋ถํด ํ ๋น์ ๊ฒฝ์ฐ
๊ฐ์ฒด ๊ตฌ์กฐ๋ถํด ํ ๋น์ ๊ฒฝ์ฐ
์ ์ด๋ค ๊ฒฝ์ฐ์๋
const ๋ณ์๋ช
,const { ๋ณ์๋ช }
์ธ์ง ๊ถ๊ธํ๋๋ฐ. ์ด์ ๋ ๋ฐ๋ก ์ด๊ฒ! ๐๐ป ๊ตฌ์กฐ ๋ถํด ํ ๋น
ํด๋น object ๋ด ๊ฐ์ ธ์ค๊ณ ์ถ์ ๊ฐ๋ค์ ์ฝ ์ง์ด์ ๊ฐ์ ธ์จ ๋ค obj๋ผ๋ ๋ณ์์ ํ ๋นํ ์ ์๋ค! ์งฑ์ ๊ธฐ