๐์๋ฐ์คํฌ๋ฆฝํธ ์์ง
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋์ํ๋ ค๋ฉด JS์์ง์ด ํ์ํ๋, ๋ธ๋ผ์ฐ์ ๋ด์ ๋ด์ฅ๋์ด ์๊ณ node.js๋ฅผ ์ค์นํด์ ๋ก์ปฌ ์ปดํจํฐ์์ ์คํํ ์ ์๋ค.
์ด๋! ๋์ํ๋ ์๊ฐ์ ๋ฐํ์์ด๋ผ๊ณ ํ๋ฉฐ, ์ด ๋ฐํ์ ๊ณผ์ ์์ ์ฝ๋๋ฅผ ํ์คํ์ค ์ฝ๊ณ ๋ฒ์ญํด ์คํํด์ฃผ๋ ๊ฒ์ ์ธํฐํ๋ฆฌํฐ ๋ผ๊ณ ํ๋ค.
์ธํฐํ๋ฆฌํฐ๋?
- ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ ์์ค์ฝ๋๋ฅผ ์ฝ์ด ํ์ค์ฉ ํด์ํ๊ณ ์คํํ๋ ํ๋ก๊ทธ๋จ ๋๋ ํ๊ฒฝ์ ๋งํ๋ค.
- ์์ค์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผ ํ์ง์๊ณ ๋ ๋ฐ๋ก ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
์ฌ์ฉ์ธ์ด : Python, Ruby, JavaScript ..
cf ) ์ปดํ์ผ๋ฌ
- ์์ค์ฝ๋๋ฅผ ํ๋ฒ์ ์ปดํ์ผํ์ฌ ์ค๊ฐ์ธ์ด ๋๋ ๊ธฐ๊ณ์ด๋ก ๋ณํํ ์คํํ๋ ๋ฐฉ์์ ์ฌ์ฉํจ
์ฌ์ฉ์ธ์ด : C, C++, JAVA ...
๐์๋ฐ์คํฌ๋ฆฝํธ๋?
- ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ด์ฉํด ๋ฐํ์์ ํ์คํ์ค ๋ฒ์ญํด์ค๋ค.
- ์ ์ฐจ์งํฅ๊ณผ ๊ฐ์ฒด์งํฅ๋ชจ๋ ๊ฐ๋ฅํ๋ฉฐ ์ฑ๊ธ ์ค๋ ๋ ์ด๋ค.
๊ฐ์ฒด์งํฅ์ด๋?
- ํ๋ก๊ทธ๋จ์์ฑ์ "๊ฐ์ฒด"๋ผ๋ ๋จ์๋ฅผ ์ค์ฌ์ผ๋ก ์๊ฐํ๋ฉฐ, ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฉ์๋๋ฅผ ํจ๊ป ๋ฌถ์ด ํํํ๋ค.
- ๊ธฐ๋ฅ๋ณ๋ก ๋ฌถ์ฌ์๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋๋ค.
๋ํ์ ๊ฐ์ฒด์งํฅ ์ธ์ด : JAVA, C++, Python
์ ์ฐจ์งํฅ์ด๋?
- ํ๋ก๊ทธ๋จ์ ์ผ๋ จ์ ์ ์ฐจ๋ ๋จ๊ณ๋ก ์์ฐจ์ ์ผ๋ก ์งํ๋๋๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ
๋ํ์ ์ ์ฐจ์งํฅ ์ธ์ด : C, Pascal
์ค๋ ๋๋?
- ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ์์ ์ ๋จ์๋ก, ํ๋์ ํ๋ก์ธ์ค๋ ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ๊ฐ๊ฐ์ ์ค๋ ๋๋ ํ๋ก๊ทธ๋จ์ ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ฉด์, ๋ณ๋์ ์คํ ํ๋ฆ์ ๊ฐ๊ณ ๋์ํ ์ ์๋ค.
- ํ๋ก์ธ์ค๋ด์์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์์ ๋๋ ๋ค์ค์ค๋ ๋(multithreading) ๊ณผ ํ๋์ ์คํํ๋ฆ์ ๊ฐ๋ ์ฑ๊ธ ์ค๋ ๋(Single Thread) ๊ฐ ์๋ค.
cf) ํ๋ก์ธ์ค
- ์คํ์ค์ธ ํ๋ก๊ทธ๋จ์ ์ธ์คํด์ค๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ํ๋ก๊ทธ๋จ์ ์คํํ๊ฒฝ์ ๋ํ๋.
- ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋ฐ์ ํ๋ก๊ทธ๋จ์ฝ๋, ๋ฐ์ดํฐ, ์คํ์ํ, ์์คํ ๋ฆฌ์์ค ๋ฑ์ ํฌํจํ๋ค.
- ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ค๋ ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋ฉฐ, ๊ฐ๊ฐ์ ํ๋ก์ธ์ค์๋ ์ด์์ฒด์ ์ ์ํด ๋ถ๋ฆฌ๋ ์คํ๊ณต๊ฐ์์ ๋์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์ธ์ค๊ฐ์ ํต์ ์ด ํ์ํ ๋๋ ์ด์์ฒด์ ๊ฐ ์ ๊ณตํ๋ IPC(Internet-process Communication)๋ฉ์ปค๋์ฆ์ ํตํด ์ด๋ฃจ์ด์ง๋ค.
์ค๋ ๋๊ฐ ๋ ๋ฆฝ์ ์ธ ์คํ ๋ฉ๋ชจ๋ฆฌ์์ญ์ ํ์๋ก ํ๋ ์ด์
- ๋ ๋ฆฝ์ฑ๊ณผ ์์ ์ฑ
๊ฐ ์ค๋ ๋๋ ๋ ๋ฆฝ์ ์ธ ์คํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๋ฏ๋ก ๋ค๋ฅธ ์ค๋ ๋์ ์์ ๊ณผ ์ํธ ๊ฐ์ญ ์์ด ์์ ์ ์คํ์ ๊ด๋ฆฌํ ์ ์๋ค. ์ด๊ฒ์ ์ค๋ ๋ ๊ฐ ๋ฐ์ดํฐ ์ ๊ทผ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ์ค๋ ๋ ๊ฐ ์์ ์ฑ์ ์ ์งํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ํ ์ค๋ ๋์ ์คํ์ด ์์๋๋๋ผ๋ ๋ค๋ฅธ ์ค๋ ๋์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
- ์ง์ญ ๋ณ์ ๋ฐ ํธ์ถ ์คํ
๊ฐ ์ค๋ ๋๋ ์์ ๋ง์ ํธ์ถ ์คํ(call stack)์ ๊ฐ์ง๋ฉฐ, ํจ์ ํธ์ถ๊ณผ ๊ด๋ จ๋ ์ง์ญ ๋ณ์, ๋งค๊ฐ ๋ณ์ ๋ฐ ๋ณต๊ท ์ฃผ์๋ฅผ ์ ์ฅํ๋ค. ๋ ๋ฆฝ๋ ์คํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ์ค๋ ๋์ ํผ๋๋์ง ์๊ณ ํธ์ถ ์คํ์ ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, ๊ฐ ์ค๋ ๋๋ ์์ ์ ํธ์ถ ์คํ์ ์ฌ์ฉํ์ฌ ํจ์ ํธ์ถ ๋ฐ ๋ฐํ์ ์ํํ ์ ์๋ค.
- ์ฌ๊ท ํจ์ ํธ์ถ
์ฌ๊ท ํจ์ ํธ์ถ ์ ๊ฐ ํธ์ถ๋ง๋ค ์๋ก์ด ์คํ ํ๋ ์์ด ์์ฑ๋์ด์ผ ํ๋ค. ์ค๋ ๋๋ง๋ค ๋ ๋ฆฝ์ ์ธ ์คํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ผ๋ฉด ์ฌ๊ท ํจ์ ํธ์ถ์ด ๊ฐ ์ค๋ ๋์์ ๋ ๋ฆฝ์ ์ผ๋ก ์ํ๋ ์ ์์ผ๋ฏ๋ก ํธ์ถ ์คํ์ด ๊ผฌ์ด๊ฑฐ๋ ์ํธ ๊ฐ์ญ์ด ๋ฐ์ํ์ง ์๋๋ค.
- ์ค๋ ๋ ๋ก์ปฌ ๋ณ์(Thread-Local Variables)
์ค๋ ๋๋ ์์ ๋ง์ ๋ก์ปฌ ๋ณ์๋ฅผ ๊ฐ์ง ์ ์์ด์, ๊ฐ ์ค๋ ๋๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ํ๋ฅผ ์ ์งํ๊ณ ๊ด๋ฆฌํ ์ ์๋ค. ๋ ๋ฆฝ๋ ์คํ ๋ฉ๋ชจ๋ฆฌ๋ ์ด๋ฌํ ์ค๋ ๋ ๋ก์ปฌ ๋ณ์๋ฅผ ํจ์จ์ ์ผ๋ก ์ง์ํ๋ค.
-์ค๋ ๋ ๊ฐ ํจ์จ์ ์ธ ๋์์ฑ ์ ์ด
๊ฐ ์ค๋ ๋๋ ์์ ๋ง์ ์คํ์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ์ค๋ ๋ ๊ฐ ๋์์ฑ์ ์ ์ดํ๊ธฐ ์ฝ๋ค. ์๋ฅผ ๋ค์ด, ์ค๋ ๋ ๊ฐ ๋ฎคํ ์ค์ ๊ฐ์ ๋๊ธฐํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์คํ ์ ๊ทผ์ ์กฐ์ ํ ์ ์๋ค.
์์ฝ : ๋ ๋ฆฝ์ ์ธ ์คํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ค๋ ๋ ๊ฐ์ ์ํธ ๊ฐ์ญ์ ๋ฐฉ์งํ๊ณ ์ค๋ ๋๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์๋ํ ์ ์๋๋ก ํด์ฃผ๋ฉฐ, ์ค๋ ๋์ ์์ ์ฑ๊ณผ ํจ์จ์ฑ์ ํฅ์์ํจ๋ค.
๐์ค์ฝํ๋?
- ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ ์ ์ํ ๋ฒ์, ์์ญ์ ์ง์ ํ๋ ๊ฒ์ ๋งํจ.
- ์ ์ธ๋ ์์น์ ๋ค๋ผ ์ ํจ๋ฒ์๊ฐ ๊ฒฐ์ ๋๋ฉฐ ์ฝ๋ ๋ธ๋ก { } ์์์๋ง ์ ํจํ๋ค.
๐ฅ ์ฅ์ ์ผ๋ก๋ ์ด๋ฆ์ถฉ๋ ๋ฐฉ์ง, ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ๋ฑ์ด ์๋ค.
์ค์ฝํ ์ฒด์ธ์ด๋?
์ค์ฒฉ๋ ํจ์์์ ๋ณ์๋ ํจ์๋ฅผ ์ฐพ์๋, ๋ด๋ถ ์ค์ฝํ์์ ์ฐพ์ง ๋ชปํ๋ฉด ์ธ๋ถ ์ค์ฝํ๋ก ์ด๋ํ์ฌ ๊ฒ์ํ๋ ๊ฒ
๐๊ธ๋ก๋ฒ ์ค์ฝํ
// ๐ ์ ์ญ ๋ณ์, ์ ์ญ ์ค์ฝํ, ๊ธ๋ก๋ฒ ๋ณ์, ๊ธ๋ก๋ฒ ์ค์ฝํ ๋ผ๊ณ ํ๋ค.
const text ='global';
{
// ๐ ์ง์ญ ๋ณ์, ๋ก์ปฌ ๋ณ์, ์ง์ญ ์ค์ฝํ, ๋ก์ปฌ ์ค์ฝํ
const text = 'inside block1';
{
console.log(text)
}
}
• ๋ต์ 'inside block1' ์ด ๋๋ค. ๋ด๋ถ์ ์๋ ๊ฒ์ ์ธ๋ถ์ ์๋ ๊ฒ์ ์ ๊ทผ์ด ์๋๊ธฐ ๋๋ฌธ์. ๋ง์ฝ inside block1 ๊ฐ์ด ์๋ค๋ฉด ํ ๋จ๊ณ ์๋ก ์์ ๋ณ์์ ์ ๊ทผํ ์ ์๋ค. ์ฝ๊ฒ ๋งํด ๊ฐ์ฅ ๊ฐ๊น์ด ๊ทผ์ ํ ๋ณ์์ ์ ๊ทผ ํ๋ ๊ฒ์ด๋ค.
๐๊ฐ๋น์ง์ปฌ๋ ํฐ
์๋ฐ์คํฌ๋ฆฝํธ์์ง ์์ฒด์์ ์ ๊ณตํด์ฃผ๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค์์ ๋์ํด์ค๋ค. ํ์ง๋ง ๋น์ฉ์ด ๋ฐ์ํ๋ค.
๊ธ๋ก๋ฒ ๋ณ์๋ ์ฑ์ด ์ข ๋ฃ๋ ๋๊น์ง ๊ณ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ง๋๊ณ , ๋ธ๋ก์ค์ฝํ๋ ์ญํ ์ด ๋๋๋ฉด ์๋์ผ๋ก ์๋ฉธ๋๋ค. ์ด๋ ์๋์ผ๋ก ์๋ฉธ๋๋ ๊ฒ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํด์ฃผ๋ ๊ฒ์ด๋ฉฐ, ๊ฐ๊ธ์ ๊ธ๋ก๋ฒํ๊ฒ ์ฐ๋๊ฒ์ ์ข์ง ์๋ค.
๐๋ ์์ปฌ ํ๊ฒฝ
๋ชจ๋ ์ฝ๋๋ธ๋ก { } ์ ๋ ์์ปฌ ํ๊ฒฝ์ด๋ผ๋ ๋ด๋ถ ์ค๋ธ์ ํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ด ๊ฒ์ ์ญํ ์ ‘๊ฐ ๋ธ๋ก๋ง๋ค ์ด๋ค ๋ณ์๊ฐ ๋ค์ด์๋์ง ๋ถ๋ชจ๊ฐ ๋๊ตฌ์ธ์ง?’ ๋ฑ์ ์ถ์ ํ๋ค.
๋ ์์ปฌ ํ๊ฒฝ์ด๋ JavaScript์์ง์ด ์๋ณ์์ ํด๋น ์๋ณ์์ ๊ฐ ๋๋ ์ฐธ์กฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ด๋ถ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค.
const a = 1; // ์ ์ญ ์ค์ฝํ
{
const a = 2; // ๋ธ๋ก ์ค์ฝํ 1
{
const a = 3; // ๋ธ๋ก ์ค์ฝํ 2
}
}
์ ๊ฐ์ด ์ ์ญ ์ค์ฝํ ๋ ์์ปฌ ํ๊ฒฝ์ด ๋ง๋ค์ด์ง๋ฉด, ๋ธ๋ก ์ค์ฝํ1, ๋ธ๋ก์ค์ฝํ2 ๋ก ์ด์ด์ง๋ ๊ฒ์ ์ค์ฝํ ์ฒด์ธ์ด๋ผ๊ณ ํ๋ค.
!!! ์ฝ๋๋ธ๋ญ ๋ฐ์์ ๋ด๋ถ์ ์ ๊ทผํ ์ ์์ง๋ง, ๋ด๋ถ์์ ์ธ๋ถ๋ฅผ ์ ๊ทผํ ์ ์๋ ์ด์ ๊ฐ ๋ ์์ปฌํ๊ฒฝ ์ฐธ์กฐ์ ์ค์ฝํ ์ฒด์ธ์ ํตํด ๋ถ๋ชจ์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค !!!
๐์คํ context ํ๊ฒฝ
์คํ context๋ JavaScript์ฝ๋๊ฐ ์คํ๋๋ ํ๊ฒฝ์ ์๋ฏธํ๋ค. ์ฝ๋ ์คํ์ค์ ๋ณ์, ํจ์, ๋งค๊ฐ๋ณ์๋ฑ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ค.
์ฝ๋์ ์คํ ํ๋ฆ๊ณผ ์๋ณ์๊ฐ์ ์ํธ ์์ฉ์ ๊ด๋ฆฌํ๋ ์ญํ ์ ํ๋ค.
์์ฝํด. ์คํ ์ปจํ ์คํธ๋ ์ฝ๋ ๋ธ๋ก์ด ์คํ๋๊ธฐ ์ํด ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ด์ '์คํ ํ๊ฒฝ'์ ์๋ฏธํ๋ค.
- ๋ณ์ ํ๊ฒฝ(Variable Environment): ํ์ฌ ์ค์ฝํ์ ๋ณ์๋ค๊ณผ ๊ทธ๋ค์ ๊ฐ ๋๋ ์ฐธ์กฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ ๋๋ค. ์ด๊ณณ์์ ๋ณ์์ ์์ฑ, ์ด๊ธฐํ, ํ ๋น ๋ฑ์ด ๊ด๋ฆฌ๋ฉ๋๋ค.
- ์ธ๋ถ ํ๊ฒฝ ์ฐธ์กฐ(Outer Environment Reference): ํ์ฌ ์คํ ์ปจํ ์คํธ์ ์ฐ๊ฒฐ๋ ์ธ๋ถ(์์) ์ค์ฝํ์ ์คํ ์ปจํ ์คํธ๋ฅผ ์ฐธ์กฐํ๋ ๋งํฌ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ค์ฝํ ์ฒด์ธ์ ํ์ฑํ๋ฉฐ ๋ณ์ ๊ฒ์์ ์ฌ์ฉ๋ฉ๋๋ค.
- ์คํ ํ๊ฒฝ(Execution Context): ํจ์์ ๋งค๊ฐ๋ณ์, ์ง์ญ ๋ณ์, this ๊ฐ ๋ฑ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์์ญ์ ๋๋ค. ์ด ์์ญ์์ ์ค์ ์ฝ๋ ์คํ์ด ์ด๋ฃจ์ด์ง๋๋ค.
๐ํธ์ด์คํ
ํธ์ด์คํ ์ด๋ ์ธํฐํ๋ฆฌํฐ๊ฐ ์ฝ๋๋ฅผ ์ฝ๊ธฐ์ , ๋ณ์์ ํจ์, ํด๋์ค๋ฑ์ ๋์ด์ฌ๋ ค ์ ์ธ ๋จผ์ ์คํํ๊ฒ ํ๋ ๊ฒ์ ๋งํ๋ค.
print();
function print() {
console.log('hello');
}
ํธ์ด์คํ ๋๋ถ์ ์ด๋ฐ์์ผ๋ก ํจ์๋ ๋์ค์ ์ ์ธ๋์์ง๋ง ๋จผ์ ํธ์ถ์ ํด๋ ์ ์์ ์ผ๋ก ์คํ๋๋ค.
ํ์ง๋ง ๋ณ์ (let, const)๋ฅผ ์ ์ธํ๊ธฐ ์ ์ ํธ์ถํ๋ฉด ์ฑ์ด ์ฃฝ์ด๋ฒ๋ฆฐ๋ค.
๋ฌธ์ ์ var๋ ํธ์ถ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ ์ธ์์ด ํ ๋น ๊ฐ๋ฅ ๋ฐ ์ฌํ ๋น, ์ฌ์ ์ธ์ด ๊ฐ๋ฅํ๋ค.
๋ฐ๋ผ์ var๋ ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ์ข์ง ์์ ๊ทผ๋์๋ ๋ง์ด ์ฌ์ฉํ์ง์๋๋ค.
ํธ์ด์คํ ์ ์ ์คํ๋๋ ๊ฑธ๊น?
๋ณ์ ๋ฐ ํจ์ ์ ์ธ์ ๋ถ๋ฆฌ
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฝ๋์คํ์ ์ค์ฝํ ๋ด์ ๋ชจ๋ ๋ณ์ ๋ฐ ํจ์๋ฅผ ์ฐพ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฐ๋ค.
์ด๋ ์ ์ธ๋ถ์ ํ ๋น๋ถ๊ฐ ๋ถ๋ฆฌ๋๋ฉฐ, ์ ์ธ๋ถ๋ง ์๋ก ๋์ด์ฌ๋ ค์ง๊ฒ ๋๋ค.
(ํจ์ ์ ์ธ์์ ํธ์ด์คํ ๋์ง๋ง, ํจ์์ ํ ๋น์ ํธ์ด์คํ ๋์ง ์๋๋ค.)
ํจ์ ์ ์ธ์
foo(); // "Hello from foo!"
function foo() {
console.log("Hello from foo!");
}
ํจ์ ํํ์
bar(); // TypeError: bar is not a function
var bar = function() {
console.log("Hello from bar!");
};
๐์๊ฒฉ๋ชจ๋
์๋ฐ์คํฌ๋ฆฝํธ์ ํน๋ณํ ์คํ๋ชจ๋๋ก ์ผ๋ฐ์ ์ธ ์ค์๋ ์์ ํ์ง ์์ ๋์์ ๋ฐฉ์งํ๊ณ , ์ข ๋ ์ผ๊ด๋ ๋์์ ์ ์งํ ์ ์๋๋ก ํด์ฃผ๋ ๋ชจ๋
๐์ด๋ฒคํธ ๋ฃจํ โญ๏ธ
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จ์ผ ์ค๋ ๋ ๊ธฐ๋ฐ ์ธ์ด๋ก, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ๋จ์ผ ์ฝ ์คํ์ ๊ฐ์ง๋ค. ์ด ๋ง์ ์์ฒญ์ด ๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
๊ทธ๋ ๋ค๋ฉด ๋น๋๊ธฐ ์์ฒญ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌ ๋ ์ ์์๊น ? ๐คท๐ปโ๏ธ
๊ทธ๊ฒ์ ๋ฐ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ํ๊ฒฝ์ธ ๋ธ๋ผ์ฐ์ ๋ Node.js๊ฐ ๋ด๋นํ๋ค. ์ฌ๊ธฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง๊ณผ ๊ทธ ์คํํ๊ฒฝ์ ์ํธ ์ฐ๋ ์์ผ์ฃผ๋ ์ฅ์น๊ฐ ๋ฐ๋ก ์ด๋ฒคํธ ๋ฃจํ์ด๋ค. ๋ฐ๋ผ์, ์ด๋ฒคํธ ๋ฃจํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์์ง ์๊ณ ๊ทธ ํ๊ฒฝ์ ์ํ๋ค.
ํ์คํฌ ํ์ ๋ง์ดํฌ๋กํ์คํฌ ํ
- ์๋ฐ์คํฌ๋ฆฝํธ์ ์คํ ํ๊ฒฝ์ 2๊ฐ์ง ํ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๊ฐ๊ฐ ์คํฌ๋ฆฝํธ ์คํ, ์ด๋ฒคํธ ํธ๋ค๋ฌ, ์ฝ๋ฐฑํจ์ ๋ฑ์ ํ์คํฌ๊ฐ ๋ด๊ธฐ๋ ๊ณต๊ฐ์ด๋ค. ํ์คํฌ๊ฐ ์ฝ๋ฐฑํจ์๋ผ๋ฉด ๊ทธ ์ข ๋ฅ์ ๋ฐ๋ผ ๋ค๋ฅธ ํ์ ๋ด๊ธฐ๋ฉฐ ๋ํ์ ์ผ๋ก๋ ์ด์ ๊ฐ์ ๊ฒ๋ค์ด ์๋ค.
- ํ์คํฌ ํ
- setTimeout(), setInterval(), UI ๋ ๋๋ง, requsetAnimationFrame()
- ๋ง์ดํฌ๋กํ์คํฌ ํ
- Promise, MutationObserver
์ด๋ฒคํธ ๋ฃจํ๋ 2๊ฐ์ ํ๋ฅผ ๊ฐ์ํ๊ณ ์๋ค๊ฐ ์ฝ ์คํ์ด ๋น๊ฒ ๋๋ฉด, ์ฝ๋ฐฑํจ์๋ฅผ ๊บผ๋ด์์ ์คํํ๋ค. ์ด ๋ ๋ง์ดํฌ๋กํ์คํฌ ํ์ ์ฝ๋ฐฑํจ์๊ฐ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ๋๋ฌธ์ ๋ง์ดํฌ๋กํ์คํฌ ํ์ ์ฝ๋ฐฑํจ์๋ฅผ ์ ๋ถ ์คํํ๊ณ ๋์ ํ์คํฌ ํ์ ์ฝ๋ฐฑํจ์๋ค์ ์คํํ๋ค. (๋จ, UI ๋ ๋๋ง์ด ํ์คํฌ ํ์ ์ํ๊ธฐ ๋๋ฌธ์ ๋ง์ดํฌ๋กํ์คํฌ ํ์ ํ์คํฌ๊ฐ ๋ง์ผ๋ฉด ๋ ๋๋ง์ด ์ง์ฐ๋ ์ ์๋ค.)
console.log('์๋
');
setTimeout(() => console.log('ํ!),0);
Promise.resolve().then(() => console.log('๋ง์ดํฌ๋ก ํ!));
์์ ๊ฐ์ ์ฝ๋๊ฐ ์์ ๋, ๊ฒฐ๊ณผ๋ ์ด์ ๊ฐ๋ค.
์๋
๋ง์ดํฌ๋ก ํ!
ํ!
์ฒ์ ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋๋ ๋, ์คํฌ๋ฆฝํธ ์คํ ์ด๋ผ๋ ํ์คํฌ๊ฐ ๋จผ์ ํ์คํฌ ํ์ ๋ค์ด๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ํ์คํฌ ํ์์ ํด๋น ํ์คํฌ๋ฅผ ๊ฐ์ ธ์ ์ฝ ์คํ์ ์คํํ๋ ๊ฒ์ด๋ค.
'Front-End > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Async, Await ( + Promise) (0) | 2023.08.25 |
---|---|
[๋น๊ต] Callbackํจ์, Promiseํจ์ (0) | 2023.08.24 |
๋ฒ๋ธ๋ง ๊ณผ ์บก์ฒ๋ง (0) | 2023.03.31 |
(JavaScript) This, Binding (0) | 2023.01.05 |
(JavaScript)NPM๊ณผ NPX์ ๋ํด ์ฝ๊ณ ์๊ฒ ์ดํดํ๊ธฐ (0) | 2022.12.27 |