๋๋ ๐
Stack
, ๐Queue
, ๐event loop
๋ฉ์ง๊ฒ ์ค๋ช ํ ์ ์๋ค๊ฝ..!
- ๋จ, ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํด์ํ๋ ์์๊ฐ ์์ฃผ ํน์ดํ๋ค๊ณ ..๐คฆโใ
<script> console.log(1+1); // 1๋น ๋ก ์คํ setTimeout(function() {console.log(2+2)}, 1000); // 3๋น ๋ก ์คํ console.log(3+3); // 2๋น ๋ก ์คํ // 2 // 6 // 4 </script>
- ์์ ์ฝ๋๊ฐ 2, 6, 4 ์์ผ๋ก ์คํ์ด ๋๋ ์ด์ ๋ ๐จโ๐ป๋ธ๋ผ์ฐ์ ์ ๋์ ์๋ฆฌ๋ฅผ ๋ฐฐ์์ผ ์ดํดํ ์ ์๊ณ ์ ! ๐โโ๏ธ
Stack
- 1>
Stack
์ ์ฐ๋ฆฌ๊ฐ ์ง ์ฝ๋๋ค์Stack
์์๋ค๊ฐ ์ง์ด๋ฃ๊ณ ํ์ค์ฉ ์คํ์ํจ๋ค.- ์ฝ๋ ์คํ ์ ๋ณ์๋ฅผ ๋ง๋๋ฉด ํด๋น ๋ณ์๋ฅผ ์ฑ์๋๊ณ ์ถ์ดํ๋ค.
- ์ด๋ ๋ณ์๋ค์ Heap์ด๋ผ๋ ๊ณต๊ฐ์ ์ ์ฅ๋์ด์์ด
Stack
์ Heap ๊ณต๊ฐ์์ ๋ณ์๋ฅผ ๊ฐ๋ค ์ด๋ค.
Stack
์ ์ค์ง 'ํ ๊ฐ๋ง ์กด์ฌ'ํด ํ ๋ฒ์ ์ฝ๋ ํ ๊ฐ'๋ง'์ ์คํ ์ํฌ ์ ์๋๋ฐ ์ด๋ฅผ ๋ณด๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ single threaded language๋ผ๊ณ ํํํฉ๋๋ค.- ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ฐ์์ผ๋ก
Stack
์ ์ฝ๋๋ฅผ ๋ฃ์ด ์ถ๊ฐํ๊ณ ์ด ์ฝ๋๋ค์ ํ ์ค์ฉ ๊บผ๋ด ์คํํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
Stack
์ด setTimeout๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ๋ง๋๋ฉด ๐คทโโ๏ธ?!Queue
- ๊ทธ๋ฌ๋ setTimeout ๊ฐ์ด ๋ฐ๋ก ์คํ์ ํ ์ ์๋ ์ฝ๋๋
Stack
์ ์ง์ด๋ฃ์ด์ ์คํํ์ง ์๋๋ค.- ์ด๋ setTimeout ์ฝ๋๋
๋๊ธฐ์ค
๋ก ์ ์ณ๋๊ณ ๋๋จธ์ง ์ฝ๋๋ค์ด ์ฐ์ ์คํ**๋๋ค.- ์ด๋ฐ์์ผ๋ก
๋๊ธฐ์ค
๋ก ๋ณด๋ด๋ ์ฝ๋๋ค, 1> Ajax ์์ฒญ์ ๋ณด๋ด๋ ์ฝ๋, 2> ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ฝ๋, 3> setTimeout ์ฝ๋์ ๊ฐ์ '๊ธฐ๋ค๋ฆผ'์ด ํ์ํ ์ฝ๋๋ค์๋๊ธฐ์ค์ ๋จธ๋ฌด๋ฅด๋ ์ํ
๊ฐ ๋๋ค.- ์ดํ setTimeout ์ฝ๋์ ์ง์ ํ ์๊ฐ์ด ์ง๋๋ฉด ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํด์ ๋ค์
StacK
์ผ๋ก ์ฝ๋๋ฅผ ์ฎ๊ฒจ์์ผํ๋ค.๋๊ธฐ์ค
์ ์๋ ์ฝ๋๋ค์Stack
์ผ๋ก ๋ฐ๋ก ์ฎ๊ธฐ์ง ๋ชปํ๊ณ 2>Queue
๋ผ๋ ๋๊ธฐ์ค๋ก ๋ณด๋ธ๋ค.
2>Queue(์ฝ๋ฐฑ ํ, ์ด๋ฒคํธ ํ)
๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋๊ธฐ์ค์๋ค๊ฐ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ์ค๋ ๊ฑธ๋ฆฌ๋ ์ฝ๋๋ค์ ์ค์ ์ธ์ด ๋ค.- ์ดํ
Queue
๋๊ธฐ์ค์์ ๋๊ธฐ๊ฐ ๋๋ ์ฝ๋๋ค์ ํ๋ ์ฉStack
์ผ๋ก ์ฌ๋ ค๋ณด๋ธ๋ค.- ๋จ
Queue
๋ผ๋ ๋๊ธฐ์ค์ ์๋ ์ฝ๋๋ค์ด 1>Stack
์ ์ฌ๋ผ๊ฐ ๋ ์กฐ๊ฑด์ด ์๋๋ฐ
์ค์งStack
์ ๊ณต๊ฐ์ด ํ ๋น์์ ๋ ๋ง ์ฌ๋ ค๋ณด๋ด์ง๋ค.
- Q. 2>
Queue
, ๋๊ธฐ์ค์ ๋ณ๋๋ก ๋ง๋ ์ด์ ??๐โ 1>
A. ๐โ1>Stack
๊ณต๊ฐ์ด ๋๋ฌด ๋ฐ์ ๊ณต๊ฐ์ด๋ผ์...ใ
<script>
console.log(1+1); // 1๋น ๋ก ์คํ
setTimeout(function() {console.log(2+2)}, 1000); // 3๋น ๋ก ์คํ
console.log(3+3); // 2๋น ๋ก ์คํ
// 2
// 6
// 4
</script>
step1>
๋จผ์ ์ฒซ ์ค์ ์ฝ๋๋ฅผ ์คํํ๋ค. step2
> ๋์งธ ์ค์ setTimeout ์ฝ๋๋ ๋ฐ๋ก ์คํํ ์๊ฐ ์๊ธฐ์ ๋๊ธฐ์ค
๋ก ๋ณด๋ธ๋ค.step3
> ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ๋ฐ์ ์๋ ์ธ๋ฒ์งธ ์ค์ ์ฝ๋๋ฅผ ์คํ๋๋ฉด์ ์ฝ์์ฐฝ์ 2, 6์ด ๋จผ์ ์ถ๋ ฅ๋๋ค.step4
> ์ด์ ๋๊ธฐ์ค
์ ์๋ setTimeout ์ฝ๋๋ 1์ด ํ์ ์คํ์ด๋๋๋ฐ Queue
๋๊ธฐ์ค์ ๊ฑฐ์ณ์ Stack
์ ์ฌ๋ผ๊ฐ๋ค.event loop
์ด๋ Event loop
์ด ๋ฐ์ํ๋๋ฐ Event loop
์ด๋ Stack
์ด ๋น ์ํ๊ฐ ๋๋ฉด, Queue
์ ์ฒซ๋ฒ์งธ ์ฝ๋๋ฅผ Stack
์ผ๋ก ๋ฐ์ด๋ฃ๋๊ฒ์ ๋งํ๋ค.
- ์ด๋ ๊ฒ
Queue
๋๊ธฐ์ค์ ์๋ setTimeout ์ฝ๋๋ Stack
์ด ๋น์ด์์ด Stack
๊ณต๊ฐ์ผ๋ก ์ฌ๋ผ๊ฐ๋ค.
=> ์ด๋ฌํ ์์์ ๋์ ์๋ฆฌ๋ฅผ ๊ฐ์ง ์ฑ ์ฝ๋๊ฐ ์คํ๋์ด ์ฝ์์ฐฝ์ ์ถ๋ ฅ์ด 2, 6, 4 ์์ผ๋ก ์ฐํ๋ค.
์ฃผ์๐) ๋ฐ๋ชฉ๋ฌธ์ ๋งค์ฐ ๋ง์ด ๋๋ฆฌ๊ฑฐ๋ ๋ฐ๋ณต๋ฌธ ๋ด๋ถ์ ์ด๋ ค์ด ์์
์ ์ํค๋ฉด ์์
์๊ฐ์ด ๋ง์ด ๋์ด๋ ์ ๋ ์๋ค.
=> ๊ทธ๋ฌ๋ ์ด๋ ค์ด ๊ณ์ฐ์ด ๋ค์ด๊ฐ ์ฝ๋๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ง๋ฉด โ
- ๋ง์ฝ 10์ด๊ฑธ๋ฆฌ๋ ์ฐ์ฐ์ ํ๋ผ๊ณ ์คํํ๋ฉด
Stack
์์ ์ด ์ฝ๋๊ฐ ์คํ๋๋๋ฐ 10์ด๊ฐ ๊ฑธ๋ฆด ๊ฒ์ด๋ค.- ๐ข๋ฌธ์ ๋ ํด๋น ์ฝ๋๊ฐ ์คํ๋์ด 10์ด๊ฐ ๊ฑธ๋ฆฌ๋ ๋์์ 1> Ajax ์์ฒญ ํ ์ฝ๋ ์คํ 2> ๋ฒํผ ํด๋ฆญ 3> setTimeout ํ์ด๋จธ์ ๊ฐ์ ์ฝ๋๋ค์ ์๋๋์ง ์๋๋ค๋ ์ ์ด๋ค.
<์์>
๋ง์ฝ ๋ฒํผ์ ํด๋ฆญํ์ฌ ๋ชจ๋ฌ์ฐฝ์ ๋์๋ฌ๋ผ๋ ์ฝ๋๊ฐ ์๋ค๋ฉด ์ง๊ธ๊ณผ ๊ฐ์ ์ํฉ์์ ๋ฒํผ์ ๋๋ฌ๋ ๋ชจ๋ฌ์ฐฝ์ด ๋จ์ง ์๋๋ฐ ๊ทธ ์ด์ ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๊ฐ์ ์ฝ๋๋ค์ ๋ฌด์กฐ๊ฑด ๋๊ธฐ์ค์ ๊ฑฐ์ณ์ Queue
์์ Stack
์ผ๋ก ์ฌ๋ผ๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ํ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ฝ๋๊ฐ Stack
์ผ๋ก ์ฌ๋ผ๊ฐ๋ ์กฐ๊ฑด์ Stack
์ด ๋น์์ ๋๋ง ์ฌ๋ผ๊ฐ๊ธฐ์ 10์ด๋์์ ์คํ์ด ๋น์ด์ ธ ์์ง์๊ธฐ์ ์๋ฌด๋ฐ ๋ฐ์์ด ์๊ฒ๋๋ค.
๊ทธ๋์ ๋ธ๋ผ์ฐ์ ํ๋ฆฌ์ง๊ฐ์ ํ์์ด ๋ฐ์ํ๊ธฐ๋ ํ๋ค.
- '์๋' ์๋ฐ์คํฌ๋ฆฝํธ๋ 1>๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋๋ฐ ์ฆ, ํ๋ฒ์ ํ์ค์ฉ ์์๋๋ก ์ฒ๋ฆฌ๋๋ค๋ ์๋ฏธ์ด๋ค. ์๋๋ฉด
Stack
์ด ํ๋์ด๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋๊ธฐ์ ์ธ์ด์ด๋ค.- ๊ทธ๋ฌ๋ '๊ฐ๋' 2>๋น๋๊ธฐ์ ์ธ ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํ๋ฐ ๋ฐ๋ก 1> Ajax ํจ์ 2> ์ด๋ฒคํธ ๋ฆฌ์ค๋3> setTimeout ๊ฐ์ ํจ์๋ฅผ ์ฐ๋ฉด ๋น๋๊ธฐ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค,
=> 1>ํ๋ฒ์ ํ์ค์ฉ ์ฒ๋ฆฌํ๋ ๋๊ธฐ์ ์ฒ๋ฆฌ๊ฐ ์๋
๋น๋๊ธฐ์ ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด์ค๋ ๊ฑธ๋ฆฌ๋ ์ฝ๋๋ ์ ๊ปด(๋๊ธฐ๊ธธ=>Queue
๋๊ธฐ์ค GOGO!)๋๊ณ
2>๋นจ๋ฆฌ ์คํ๋๋ ๊ฒ ๋จผ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋น!
- ์ค๋์ ๊ตํ1: ์คํ์ ๋ฐ์๊ฒ ํ์ง๋ง๋ฃจ์.
- ์ค๋์ ๊ตํ2: ํ๋ ๋ฐ์๊ฒ ํ์ง๋ง๋ฃจ์
ex> ๋ฒํผ ํ๋์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ 1000๊ฐ์ฉ ๋ฌ์๋์ผ๋ฉด ํ์ ๋๊ธฐํ๊ณ ์๋ ์ฝ๋๊ฐ 1000๊ฐ์ฉ ์๊ธฐ๋ ๊ฑด๋ฐ ํ์์ ์คํ์ผ๋ก ์ฌ๋ ค๋ณด๋ด๋ ๊ฒ๋ ํ๋ค๊ณ ์ฌ๋ ค๋ณด๋๋คํ๋๋ผ๋ ์คํ์์ ์ค๋๊ฑธ๋ฆฌ๋ฉด ๊ทธ๋งํผ ๋ค๋ฅธ ํ๋ ์ฒ๋ฆฌ๋๋ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฐ๋ค.
=> ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋๋ฌด ๋ง์ด ๋ถ์ฐฉํ์ง๋ง๋ฃจ์
- ์ฝ๋ฉ์ ํ๋ - https://www.youtube.com/watch?v=v67LloZ1ieI