ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ค์๊ณผ ๊ฐ์ ํจ์ ์ฝ๋๊ฐ ์ด๋ค ์์๋๋ก ์ถ๋ ธ๋๋์ง ์ฝ ์คํ, ๋ฐฑ๊ทธ๋ผ์ด๋, ๋ฐ์คํฌ ํ, ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ํตํด ์ดํด๋ณด๊ณ ์ ํ๋ค.
1. ์ฒ์ ์ฝ ์คํ(์คํ์ปจํ ์คํธ)์๋ ํฌ๋กฌ์ ์ ์ญ ์ปจํ ์คํธ์ธ anoymous ํจ์๊ฐ ๋์จ๋ค.
2. setTimeout ํจ์๋ ๋น๋๊ธฐ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ์คํ์ปจํ ์คํธ์ ์ฌ๋ผ๊ฐ ๋ค, ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋์ด๊ฐ๋ค.
(์ด๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ ์ ๋ฌ ๋ ์นด์ดํธ ์๊ฐ ๋ฉ์ถ์ง ์๊ณ ๋์ ์คํ์ด ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ฒด๋ ์ฑ๊ธ ์ค๋ ๋ ํ์์ผ๋ก ๋์ํ์ง๋ง
๋ฐฑ๊ทธ๋ผ์ด๋์ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ด์์ฒด์ ๋ฐ C++์ ์ํด ๊ด๋ฆฌ๊ฐ ๋๋ฏ๋ก ๋ฉํฐ ์ค๋ ๋๊ฐ ๊ฐ๋ฅํ๋ค.)
3. ์ฝ ์คํ์ ๋ง์ง๋ง์ผ๋ก ๋จ์ anoymous๊ฐ pop๋์ด ์ข ๋ฃ๊ฐ ๋๋ฉด, ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋๊ธฐ ์ค์ด๋ setTimeout ํจ์๊ฐ ๋ฐ์คํฌ ํ๋ก ๋์ด๊ฐ๊ฒ
๋๋ฉฐ ์ด๋ฒคํธ ๋ฃจํ ์ฒ๋ฆฌ์ ์ํด ์ฝ ์คํ์ ์ ์ฌ ๋ฐ ์คํ๋๋ค. ์ด๋ run ํจ์๊ฐ ํธ์ถ๋๋ค.
4. run ํจ์์ ์ ์ธ๋์ด ์๋ setTimeout ํจ์์ ์๊ฐ ์ธ์๊ฐ์ด 0์ด๊ธด ํ์ง๋ง ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ก ์งํ๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ํธ์ถ๋์ง ์๊ณ ๋ฐฑ๊ทธ๋ผ ์ด๋๋ก ๋์ด๊ฐ๋ค.
5. Promise ๊ฐ์ฒด๊ฐ ๋ฐํ์ ์ฑ๊ณต ํ hi ๋ฌธ์์ด์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋์ด๊ฐ์ง ์๊ณ Promise ๊ฐ์ฒด์ ์ ์ฅ๋๋๋ฐ, ์ด๋ Promise ๊ฐ์ฒด๊ฐ ์คํ์ ๋ฐ ๋ก ํ๋ ๊ฒฐ๊ด๊ฐ(then/catch์ ์ํ ํ์์ฒ๋ฆฌ)์ ๋์ค์ ๋ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
์ดํ Promise๋ก๋ถํฐ ๋ฐ์ ๊ฒฐ๊ด๊ฐ์ then ๋ฉ์๋๋ ์ธ์๋ก ์ ๋ฌ ๋ฐ์ console.log ํ์ ์ฒ๋ฆฌ์ ํจ๊ป ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋์ด๊ฐ๋ค.
6. oneMore ํจ์๊ฐ ํธ์ถ๋์ด one more ๋ฌธ์์ด์ด ํธ์ถ๋๊ณ ์ฝ ์คํ์ ์ ์ฌ๋์ด ์๋ ์คํ์ปจํ ์คํธ๋ค์ด ํ๋ ์ฉ pop๋์ด ์ข ๋ฃ๋๋ค. (์คํ ์ First in-Last out ํน์ฑ์ผ๋ก ์ธํด)
7. ์ฝ์คํ์ ์ด๋ ํ ์คํ์ปจํ ์คํธ๋ ์คํ๋์ง ์์ ๋์ผ ๋น๋ก์ ๋ฐฑ๊ทธ๋ผ์ด๋์ ๋จ์ ์๋ setTimeout๊ณผ then์ ํ์ ์ฒ๋ฆฌ๋ค์ด ๋ฐ์คํฌ ํ๋ก
๋์ด๊ฐ๊ฒ ๋๋ฉฐ ์ด๋ฒคํธ ๋ฃจํ ์ฒ๋ฆฌ์ ์ํด ์คํ์ปจํ ์คํธ์ ์ ์ฌ ๋ฐ ์คํ๋๋ค.
์ด๋ setTimeout ํจ์๋ณด๋ค then ๋ฉ์๋์ ์ํ ํ์ ์ฒ๋ฆฌ๊ฐ ์ฐ์ ์์๊ฐ ๋ ๋๊ธฐ ๋๋ฌธ์ ๋จผ์ ์คํ์ด ๋๋ค.
'JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋น๋ ํจํด(Builder Pattern)์ผ๋ก ๊ฐ์ฒด ์์ฑ์ ๋ช ์์ ์ด๊ณ ๊น๋ํ๊ฒ ๊ตฌํ (0) | 2021.03.11 |
---|---|
ํด๋์ค ๋ด์์ this๋ฐ์ธ๋ฉ์ด ์ ๋๋ก ์๋๋ ๋ฌธ์ (0) | 2021.03.11 |
ํด๋์ค ๋ด์์์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ฒ๋ฆฌ (0) | 2021.03.09 |
module.exports์ exports์ ๊ด๊ณ (0) | 2021.02.28 |
์๋ฐ์คํฌ๋ฆฝํธ ํ์ฑ๊ณผ ์คํ (0) | 2021.02.28 |