์ฑ <๋ฌ๋์๋ฐ์คํฌ๋ฆฝํธ>๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๋ฐฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ ๋ด์ฉ์ ๋๋ค.
๋ชฉ์ฐจ
- 1. ์ด๋ฒคํธ
- 2. ์ด๋ฒคํธ ๋ฃจํ(Event Loop)์ ๋์์ฑ(Concurrency)
- 2-1) ๋ธ๋ผ์ฐ์ ํ๊ฒฝ
- 2-2) ์ด๋ฒคํธ ์์
- 3. ์ด๋ฒคํธ์ ์ข ๋ฅ(์์ฃผ ์ฌ์ฉ๋๋ ์ด๋ฒคํธ)
๋ ๋ค์ํ ์ด๋ฒคํธ๋ฅผ ์๊ณ ์ถ๋ค๋ฉด ์๋์ MDN์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํ๋ค.
https://developer.mozilla.org/en-US/docs/Web/Events
<์ด๋ฒคํธ>
1. ์ด๋ฒคํธ
- ์ด๋ฒคํธ(event)๋ DOM ์์์ ๊ด๋ จ๋ ์ด๋ค ์ฌ๊ฑด์ ์๋ฏธํ๋ค.
- ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ๋๊ตฐ๊ฐ ์ด๋ฅผ ๊ฐ์งํ ์ ์์ด์ผ ํ๋ฉฐ ๊ทธ์ ๋์ํ๋ ์ฒ๋ฆฌ๋ฅผ ํธ์ถํด ์ฃผ์ด์ผ ํ๋ค.
- ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ ์ ์์ผ๋ฉฐ ์ด๋ฒคํธ ๋ฐ์ ์์๋ ํต์งํด ์ค๋ค. ์ด ๊ณผ์ ์ ํตํด ์ฌ์ฉ์์ ์นํ์ด์ง๋ ์ํธ์์ฉ(Interaction)์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ : ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ๊ทธ์ ๋ง๋ ๋ฐ์์ ํ๊ธฐ ์ํด ์ด๋ฒคํธ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ผ๋ ํจ์์ ์ฐ๊ฒฐ๋๋ค. ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ธฐ ์ ์๋ ์คํ๋์ง ์๋ค๊ฐ ์ด๋ฒคํธ๊ฐ ๋ฐ์๋๋ฉด ์คํ๋๋ค.
2. ์ด๋ฒคํธ ๋ฃจํ(Event Loop)์ ๋์์ฑ(Concurrency)
- ๋ธ๋ผ์ฐ์ ๋ ๋จ์ผ ์ฐ๋ ๋(single-thread)์์ ์ด๋ฒคํธ ๋๋ฆฌ๋ธ(event-driven) ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
- ๋จ์ผ ์ฐ๋ ๋๋ ํ๋์ ์์ (task)๋ง์ ์ฒ๋ฆฌํ ์ ์์ง๋ง, ์ค์ ๋ก ๋์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง์ task๊ฐ ๋์์ ์ฒ๋ฆฌ๋๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋ค. ์ด์ฒ๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์์ฑ(Concurrency)์ ์ง์ํ๋ ๊ฒ์ด ๋ฐ๋ก ์ด๋ฒคํธ ๋ฃจํ(Event Loop)์ด๋ค.
2-1) ๋ธ๋ผ์ฐ์ ํ๊ฒฝ
- ๋๋ถ๋ถ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํฌ๊ฒ Call Stack๊ณผ Heap์์ญ์ผ๋ก ๋๋๋ค.
- Call Stack(ํธ์ถ ์คํ) : ์์ ์ด ์์ฒญ๋๋ฉด(ํจ์๊ฐ ํธ์ถ๋๋ฉด) ์์ฒญ๋ ์์ ์ ์์ฐจ์ ์ผ๋ก Call Stack์ ์์ด๊ฒ ๋๊ณ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จ ํ๋์ Call Stack์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํด๋น task๊ฐ ์ข ๋ฃํ๊ธฐ ์ ๊น์ง๋ ๋ค๋ฅธ ์ด๋ค task๋ ์ํ๋ ์ ์๋ค.
- Heap : ๋์ ์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด ์ธ์คํด์ค๊ฐ ํ ๋น๋๋ ์์ญ์ด๋ค.
- ์ด์ ๊ฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋จ์ํ ์์ ์ด ์์ฒญ๋๋ฉด Call Stack์ ์ฌ์ฉํ์ฌ ์์ฒญ๋ ์์ ์ ์์ฐจ์ ์ผ๋ก ์คํํ ๋ฟ์ด๋ค. ์์์ ์ธ๊ธํ ๋์์ฑ(Concurrency)์ ์ง์ํ๊ธฐ ์ํด ํ์ํ ๋น๋๊ธฐ ์์ฒญ(์ด๋ฒคํธ๋ฅผ ํฌํจ) ์ฒ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ตฌ๋ํ๋ ํ๊ฒฝ ์ฆ ๋ธ๋ผ์ฐ์ (๋๋ Node.js)๊ฐ ๋ด๋นํ๋ค.
- Event Queue(Task Queue) : ๋น๋๊ธฐ ์ฒ๋ฆฌ ํจ์์ ์ฝ๋ฐฑ ํจ์, ๋น๋๊ธฐ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ, Timer ํจ์(setTimeout(), setInterval())์ ์ฝ๋ฐฑ ํจ์๊ฐ ๋ณด๊ด๋๋ ์์ญ์ผ๋ก ์ด๋ฒคํธ ๋ฃจํ(Event Loop)์ ์ํด ํน์ ์์ (Call Stack์ด ๋น์ด์ก์ ๋)์ ์์ฐจ์ ์ผ๋ก Call Stack์ผ๋ก ์ด๋๋์ด ์คํ๋๋ค.
- Event Loop(์ด๋ฒคํธ ๋ฃจํ) : Call Stack ๋ด์์ ํ์ฌ ์คํ์ค์ธ task๊ฐ ์๋์ง ๊ทธ๋ฆฌ๊ณ Event Queue์ task๊ฐ ์๋์ง ๋ฐ๋ณตํ์ฌ ํ์ธํ๋ค. ๋ง์ฝ Call Stack์ด ๋น์ด์๋ค๋ฉด Event Queue ๋ด์ task๊ฐ Call Stack์ผ๋ก ์ด๋ํ๊ณ ์คํ๋๋ค.
2-2) ์ด๋ฒคํธ ์์
function func1() {
console.log('func1');
func2();
}
function func2() {
setTimeout(function () {
console.log('func2');
}, 0);
func3();
}
function func3() {
console.log('func3');
}
func1();
์ ์ฝ๋ ์คํ ์์
- ํจ์ func1์ด ํธ์ถ๋๋ฉด ํจ์ func1์ Call Stack์ ์์ธ๋ค.
- ํจ์ func1์ ํจ์ func2์ ํธ์ถํ๋ฏ๋ก ํจ์ func2๊ฐ Call Stack์ ์์ด๊ณ setTimeout๊ฐ ํธ์ถ๋๋ค.
- setTimeout์ ์ฝ๋ฐฑํจ์๋ ์ฆ์ ์คํ๋์ง ์๊ณ ์ง์ ๋๊ธฐ ์๊ฐ๋งํผ ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ “tick” ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ํ์คํฌ ํ๋ก ์ด๋ํ ํ Call Stack์ด ๋น์ด์ก์ ๋ Call Stack์ผ๋ก ์ด๋๋์ด ์คํ๋๋ค.
3. ์ด๋ฒคํธ์ ์ข ๋ฅ
์์ฃผ ์ฌ์ฉ๋๋ ์ด๋ฒคํธ
EVENT | EVENT ๋ด์ฉ |
OnLoad | ํ์ฌ์ ํ์ด์ง๊ฐ ๋ก๋ฉ๋์์ ๊ฒฝ์ฐ |
OnUnload | ํ์ฌ์ ํ์ด์ง์์ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ ๊ฒฝ์ฐ |
OnError | ํ์ฌ์ ํ์ด์ง๋ฅผ ์ฝ๋ ์ค์ JavaScript Error๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ |
OnAbort | ์ด๋ฏธ์ง๋ฅผ ์ฝ๋ ๋์ค ์ค์งํ์์ ๊ฒฝ์ฐ |
OnMouseOver | ๋ง์ฐ์ค ์ปค์๋ฅผ ๊ฐ์ฒด ์์ ๋์์ ๊ฒฝ์ฐ |
OnMouseOut | ๋ง์ฐ์ค ์ปค์๋ฅผ ๊ฐ์ฒด ์์ ๋์๋ค๊ฐ ๋ฐ์ผ๋ก ์ด๋ํ์ ๊ฒฝ์ฐ |
OnClick | ๋งํฌ ๋ถ๋ถ์ด๋ ๋ฒํผ์ ํด๋ฆญํ์ ๊ฒฝ์ฐ |
OnDbclick | ๋งํฌ ๋ถ๋ถ์ด๋ ๋ฒํผ์ ๋๋ธํด๋ฆญํ์ ๊ฒฝ์ฐ |
OnMouseDown | ๋งํฌ ๋ถ๋ถ์ด๋ ๋ฒํผ์ ํด๋ฆญํ์ ๊ฒฝ์ฐ(OnClick๊ณผ ๋์ผ) |
OnMouseUp |
๋ง์ฐ์ค ๋ฒํผ์ ํด๋ฆญํ๋ค๊ฐ ๋ผ์์ ๊ฒฝ์ฐ |
OnKeyDown | ํค๋ณด๋๋ฅผ ๋๋ ์ ๊ฒฝ์ฐ |
OnKeyPress | ํค๋ณด๋๋ฅผ ๋๋ฅด๊ณ ์์ ๊ฒฝ์ฐ |
OnKeyUp | ํค๋ณด๋๋ฅผ ๋๋ ๋ค ๋ผ์์ ๊ฒฝ์ฐ |
OnFocus | ํผ ์์ ์ ๋ ฅํ๋์์ ๋ง์ฐ์ค ์ปค์๋ฅผ ์์น ํ์์ ๊ฒฝ์ฐ |
OnBlur | ํผ ์์ ์ ๋ ฅํ๋์์ ๋ค๋ฅธ๊ณณ์ผ๋ก ๋ง์ฐ์ค ์ปค์๋ฅผ ์์น ํ์์ ๊ฒฝ์ฐ |
OnChange | ํผ ์์ ์์ ์ ๋ ฅํ๋๊ฐ ๋ณ๊ฒฝ๋์์ ๊ฒฝ์ฐ |
OnSelect | ํผ ์์ ์์ ์ ๋ ฅํ๋ ๋ด์ ํ ์คํธ๋ฅผ ์ ํํ์์ ๊ฒฝ์ฐ |
Onsubmit | ํผ ์์์ ์ ์กํ ๊ฒฝ์ฐ |
OnReset | ํผ ์์์ ์ฌ์ค์ ํ์ ๊ฒฝ์ฐ |
OnHelp | Help Key๋ฅผ ๋๋ ์ ๊ฒฝ์ฐ |
OnReadyStateChange | ํ์ด์ง๊ฐ ๋ก๋๋ ๊ฒฝ์ฐ |
OnAfterUpdate | ํผ ์์์์ ์ ๋ ฅ ํ๋๊ฐ ๋ณ๊ฒฝ ๋์์ ๊ฒฝ์ฐ |
OnBeforeUpdate | ํผ ์์ ์์ ํญ๋ชฉ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ |
OnScroll | ์คํฌ๋กค ๋ง๋๋ฅผ ์คํฌ๋กคํ ๊ฒฝ์ฐ |
'๐ฐ ์ธ์ด > JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Ajax (0) | 2020.01.25 |
---|---|
๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ(2) - DOM ์์ ์ ๊ทผ, ์กฐ์ (0) | 2020.01.24 |
๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ(1) - ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ DOM (0) | 2020.01.24 |
์ ๊ท ํํ์ (0) | 2020.01.23 |
๋น๋๊ธฐ์ ํ๋ก๊ทธ๋๋ฐ(1) - ๋๊ธฐvs๋น๋๊ธฐ, ์ฝ๋ฐฑ (0) | 2020.01.14 |