Javascript๋ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด
Javascript๋ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด์
๋๋ค. ์ฆ, ํ ๋ฒ์ ํ๋์ ์์
ํน์ ํ ๋ฒ์ ์ฝ๋ ์กฐ๊ฐ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์๋ฐํ ๋งํ๋ฉด, Javascript์ ๋ฉ์ธ ์ค๋ ๋์ธ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ์ฑ๊ธ ์ค๋ ๋์
๋๋ค.
ํ์ง๋ง ์ด๋ฒคํธ ๋ฃจํ๋ง ๋
๋ฆฝ์ ์ผ๋ก ์คํ๋์ง๋ ์๊ณ , ์น ๋ธ๋ผ์ฐ์ ๋ nodeJs์ ๋์์ ๋ฐ์ ๋ฉํฐ์ค๋ ๋์ฒ๋ผ ์คํ์ด ๋ฉ๋๋ค.
์ฆ, Javascript ์์ฒด๋ ์ฑ๊ธ ์ค๋ ๋๊ฐ ๋ง์ง๋ง ๋ฐํ์ ํ๊ฒฝ์ ๋ฉํฐ ์ค๋ ๋์ฒ๋ผ ์๋๋ฉ๋๋ค.
์ฑ๊ธ ์ค๋ ๋๋ก ์ด๋ป๊ฒ ํ๋ฒ์ ์ฌ๋ฌ ์์ฒญ์ ์ฒ๋ฆฌํ ๊น?
๊ธฐ์กด์ ์ฌ์ฉ๋๋ ๋๊ธฐ์ ์์ฒญ์ ์ฝ๋๋ฅผ ํ ์ค ํ ์ค์ฉ ์ฐจ๋ก๋๋ก ์คํ๋๊ธฐ์ ์์
์๊ฐ์ด ๊ธธ์ด์ง๊ณ , ์์์ ๋ญ๋น๊ฐ ์ฌํด์ง๋๋ค.
์ด๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋น๋๊ธฐ ์์
์ ์ฌ์ฉํฉ๋๋ค.
๋๊ธฐ(sync), ๋น๋๊ธฐ(async)
๋๊ธฐ(sync): ์ด์ด ๋ฌ๋ฆฌ๊ธฐ
๋น๋๊ธฐ(async): ๊ฐ์ ๋ฌ๋ฆฌ๊ธฐ
๋๊ธฐ์ ์คํ: ์์ฐจ์ ์ผ๋ก ์์ ์ด ์คํ. ์ด์ ์์ ์ด ์์ง ์คํ ์ค์ด๋ผ๋ฉด ๋ค์ ์์ ์ ์คํํ ์ ์์ต๋๋ค. ๋ค์ ์์ ์ ํ๊ธฐ ์ํด์, ์ด์ ์์ ์ ์คํ ๊ฒฐ๊ณผ๊ฐ ํ์ํ ๋ ์ ํฉํฉ๋๋ค. Javascript๋ ์ผ๋ฐ์ ์ผ๋ก ๋๊ธฐ ์คํ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
๋น๋๊ธฐ์ ์คํ: ๋น ์์ฐจ์ ์ผ๋ก ์์ ์ ์คํ. ์ด์ ์์ ์ ์คํ ์ฌ๋ถ๊ฐ ๋ค์ ์์ ์ ์ํฅ์ ๋ผ์น์ง ์์ต๋๋ค. ์์ ์ด ์๋ฃ๋๋๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ณ , ์คํ ๊ฒฐ๊ณผ ๊ฐ์ด ๋ค์ ์์ ์ ์ํฅ์ ๋ผ์น์ง ์๋๋ค๋ฉด ๋น๋๊ธฐ์ ์ผ๋ก ์คํํ ์ ์์ต๋๋ค.
Javascript๋ ์์ง์ด ๋จ ํ๋์ Call Stack
์ผ๋ก ์ฝ๋๋ฅผ ์คํํ๊ธฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ธฐ ์คํ ์ธ์ด์
๋๋ค. ํ์ง๋ง ๋น๋๊ธฐ์ ์คํ์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ ์๋๋๋ค. Javascript์์์ ๋น๋๊ธฐ์ ์์
์ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ Call Stack
๋ง์ด ์๋ Callback Queue
์ Event Loop
์ ๋์์ด ํ์ํฉ๋๋ค.
Javascript์ ๋ฐํ์ ๊ณผ์
์ถ์ฒ: https://dkje.github.io/2020/09/20/AsyncAndEventLoop/
Javascript์ ์์ง
Javascript์ ์์ง์ ์น ํ์ด์ง์ Javascript ์ฝ๋๋ฅผ ์์ ๋ฐ์ ๊ตฌ๋ฌธ์ ๋ถ์ํ๊ณ , ๊ตฌ๋ฌธ ์ค๋ฅ๊ฐ ์๋ค๋ฉด ์คํ ๊ฐ๋ฅํ ๋ช
๋ น์ผ๋ก ๋ณํ๋ฉ๋๋ค.
Javascript์ ์์ง์ Memory Heap
๊ณผ Call Stack
์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
Heap: ๋ฉ๋ชจ๋ฆฌ ํ์ ๋ณ์ ๋ฐ ๊ฐ์ฒด๋ค์ ํ ๋นํ๋ ๊ณต๊ฐ์
๋๋ค. Javascript์ ๋ฉ๋ชจ๋ฆฌ๋ ์๋ ํ ๋น๊ณผ ํด์ ๊ฐ ๋ถ๊ฐ๋ฅํ๋ฉฐ ๋์ Garbage Collector
๋ก ๊ด๋ฆฌ๋ฉ๋๋ค. ๋ณ์์ ๊ฐ์ฒด์ ๋ํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ฌ๊ธฐ์์ ๋ฐ์๋ฉ๋๋ค.
Callback Queue: ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋ ์ฝ๋ฐฑํจ์๊ฐ ๋ณด๊ด๋๋ ์์ญ.
Javascript์ ๋ฐํ์์๋ ์ฒ๋ฆฌํ ๋ฉ์์ง ๋ชฉ๋ก๊ณผ ์คํํ ๊ด๋ จ ์ฝ๋ฐฑ ํจ์์ธ ๋ฉ์์ง ๋๊ธฐ์ด์ด ํฌํจ๋์ด ์์ต๋๋ค.
์คํ์ ์ถฉ๋ถํ ์ฉ๋์ด ์์ผ๋ฉด ๋ฉ์์ง๊ฐ ๋๊ธฐ์ด์์ ๊บผ๋ด์ด ๊ด๋ จ ํจ์ ํธ์ถ(๋ฐ๋ผ์ ์ด๊ธฐ ์คํ ํ๋ ์ ์์ฑ)๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
์คํ์ด ๋ค์ ๋น๊ฒ ๋๋ฉด ๋ฉ์์ง ์ฒ๋ฆฌ๊ฐ ์ข
๋ฃ๋ฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฌํ ๋ฉ์์ง๋ ์ฝ๋ฐฑ ๊ธฐ๋ฅ์ด ์ ๊ณต๋ ๊ฒฝ์ฐ ์ธ๋ถ ๋น๋๊ธฐ ์ด๋ฒคํธ(์: ๋ง์ฐ์ค ํด๋ฆญ ๋๋ HTTP ์์ฒญ์ ๋ํ ์๋ต ์์ )์ ๋ํ ์๋ต์ผ๋ก ๋๊ธฐ์ด์ ์ถ๊ฐ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ๋๋ฐ ์ฝ๋ฐฑ ๊ธฐ๋ฅ์ด ์ ๊ณต๋์ง ์์๋ค๋ฉด ๋ฉ์์ง๊ฐ ๋๊ธฐ์ด์ ์ถ๊ฐ๋์ง ์์์ ๊ฒ์
๋๋ค.
- ํ(Queue): ์๋ฃ ๊ตฌ ์ค ํ๋, ์ ์ ์ ์ถ(FIFO, First In First Out)์ ๋ฃฐ์ ๋ฐ๋ฆ ๋๋ค.
Call Stack: Call Stack
์ ํจ์์ ํธ์ถ์ ์คํ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ณต๊ฐ์
๋๋ค. Javascript์ ์์ง์ ๋จ ํ๋์ Call Stack
์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฑ๊ธ ์ค๋ ๋์ ๋๊ธฐ์ ๋ฐฉ์์ผ๋ก ์คํ๋ฉ๋๋ค.
ํจ์๋ ํธ์ถ ์ Call Stack
์ ์ถ๊ฐ(push)
๋ฉ๋๋ค.
์ต์์์ ์คํ ํจ์๊ฐ ์คํ๋๋ ๋์ ํ์์ ํจ์๋ค์ ์์
์ ๋ฉ์ถ ์ฑ ๋๊ธฐํ๊ณ ์์ต๋๋ค.
์ต์์์ ํจ์๊ฐ ์์
์ ์๋ฃํ ํ์ Call Stack
์์ ์ ๊ฑฐ(pop)
๋๋ฉฐ return ๊ฐ
๊ณผ ํจ๊ป ์ด์ ์คํ ํจ์๋ก ๋๋์๊ฐ๋๋ค.
- ์คํ(stack): ์๋ฃ๊ตฌ์กฐ ์ค ํ๋, ์ ์ ํ์ถ(LIFO, Last In First Out)์ ๋ฃฐ์ ๋ฐ๋ฆ.
Web API
๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ API๋ก,
DOM, Ajax, Timeout
๋ฑ์ด ์์ต๋๋ค.Call Stack
์์ ์คํ๋ ๋น๋๊ธฐ ํจ์๋ Web API
๋ฅผ ํธ์ถํ๊ณ , Web API
๋ ์ฝ๋ฐฑํจ์๋ฅผ Callback Queue
์ ๋ฐ์ด ๋ฃ์ต๋๋ค.
์ด๋ฒคํธ ๋ฃจํ(Event Loop)
Call Stack
๊ณผ Callback Queue
์ ์ํ๋ฅผ ์ฒดํฌํ์ฌ, Call Stack
์ด ๋น ์ํ๊ฐ ๋๋ฉด, Callback Queue
์ ์ฒซ๋ฒ์งธ ์ฝ๋ฐฑ์ Call Stack
์ผ๋ก ๋ฐ์ด๋ฃ์ต๋๋ค.
์ด๋ฌํ ๋ฐ๋ณต์ ์ธ ํ์๋ฅผ ํฑ(tick)์ด๋ผ๊ณ ์นญํฉ๋๋ค.
์ฐธ๊ณ ํ๋ฉด ์ข์ ์์
'๐ฅ Front-End > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] 4. ์์์ ํ๋ณํ, ๋ช ์์ ํ๋ณํ, Nominal, ๊ตฌ์กฐํ, ๋ ํ์ดํ (0) | 2022.03.31 |
---|---|
[JS] 5. == & === & typeof (0) | 2022.03.22 |
[JS] 3. ๊ฐ ํ์ (Value Type) & ์ฐธ์กฐ ํ์ (Reference Type) (0) | 2022.03.22 |
[JS] 2. ์์์๋ฃํ(Primitive Types) (0) | 2022.03.22 |
[JS] ๋ณ์ (0) | 2022.03.22 |