[๊ธฐ์ ๋ฉด์ ] JavaScript
๐ง ๊ธฐ์ ๋ฉด์ ๋๋น๋ฅผ ์ํ ๊ณต๋ถ 2..
Virtual-DOM
DOM์ ์ถ์ํํ ๊ฐ์์ ๊ฐ์ฒด. DOM์ด๋ HTML ๋ฌธ์๋ฅผ ํ์ฑํ์ฌ ๋ฌธ์์ ๊ตฌ์ฑ ์์๋ค์ ๊ฐ์ฒด๋ก ๊ตฌ์กฐํํ ๊ฒ์ด๋ค.
virtual-DOM์ ๋ ๋๋ง์ ๋นํจ์จ์ ์ธ ๋ฌธ์ , DOM์ ๋ณต์ก๋ ์ฆ๊ฐ๋ก ์ธํ ์ ์ง ๋ณด์๊ฐ ์ด๋ ค์์ง๋ ๋ฌธ์ ๋ฑ์ ํด๊ฒฐํ๊ธฐ ์ํ ๊ธฐ์ ์ด๋ค.
Vritual-DOM์ ๋ณ๊ฒฝ ๋ด์ญ์ ํ๋ฒ์ ๋ชจ์ผ๊ณ (๋ฒํผ๋ง) ์ค์ DOM๊ณผ ์ฐจ์ด๋ฅผ ํ๋จํ ํ, ๊ตฌ์ฑ ์์์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ฐพ์ ๋ฐ๊พผ ํ, ๊ทธ์ ๋ฐ๋ฅธ ๋ ๋๋ง์ ํ ๋ฒ๋ง ํ๋ฉด ๋๋ค.
๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์ (what happens when type google)
- ์ฌ์ฉ์๊ฐ ํน์ ํ์ด์ง์ ์ ์ํ์ฌ HTML์ ์๋ฒ๋ก๋ถํฐ ๋ด๋ ค๋ฐ์ผ๋ฉด, ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์์ ์ด๋ฅผ ํ์ฑํ๋ค.
- HTML์ ํ์ฑํ๋ฉด์ DOM ํธ๋ฆฌ๋ฅผ ๋ง๋ค๊ฒ ๋๋๋ฐ, ์ด๋ Link ํ๊ทธ๋ฅผ ๋ง๋ StyleSheet๋ฅผ ๋ด๋ ค๋ฐ๊ฒ ๋ ๊ฒฝ์ฐ CSS ํ์ฑ์ ํตํด CSSOM(CSS Object Model) ํธ๋ฆฌ๋ฅผ ๋ง๋ ๋ค.
- ์ด ๋์ ๊ฒฐํฉํ์ฌ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ๋ ์ด์์ ์์ ์ ํตํด ์ฌ์ฉ์์๊ฒ ๊ทธ๋ ค์ค ์์ญ์ ๊ณ์ฐํ ๋ค ํ๋ฉด์ ๋ฟ๋ ค์ค๋ค.
- ์ด๋ ์ ๊ณผ์ ์ ์งํํ๋ฉฐ Javascript๋ฅผ ๋ง๋๋ฉด, ๋ ๋๋ง ์์ง์ด ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ปจํธ๋กค์ ๋๊ฒจ๋ฐ๊ณ ๊ฒฐ๊ณผ๊ฐ์ ์ค๋ค. ์ด๋ DOM ํ์ฑ์ ์ค๋จ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์ ์คํ์ด ์๋ฃ๋๋ฉด ๋ค์ HTML ํ์๋ก ์ ์ด ๊ถํ์ด ๋์ด๊ฐ๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ์ค์ง๋ ์์ ๋ถํฐ DOM ํ์ฑ์ ์ฌ๊ฐํ๋ค.
์์ฑ๋ DOM ๋ ธ๋์ ๋ ์ด์์ ์์น ๋ณ๊ฒฝ ์ ์ํฅ์ ๋ฐ์ ๋ชจ๋ ๋ ธ๋์ ์์น๋ฅผ ์ฌ๊ณ์ฐ ํ์ฌ ๋ ๋ ํธ๋ฆฌ๋ฅผ ์ฌ์์ฑํ๋ ๊ณผ์ ์ Reflow ๊ณผ์ ์ด๋ผ๊ณ ํ๋ฉฐ, ์ด ๊ณผ์ ์ด ๋๋ ํ ์ฌ์์ฑ๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ฒ์ Repaint๋ผ๊ณ ํ๋ค. (reflow๊ฐ ์ด๋ฃจ์ด์ก๋ค๊ณ ํญ์ repaint ๋๋ ๊ฒ์ ์๋๋ค. ๋ฐฐ๊ฒฝ์ ๋ฑ ๋ ์ด์์ ์์น์ ์ํฅ์ ๋ผ์น์ง ์๋ ๊ฒ์ repaint๋ง ์งํ)
script ํ๊ทธ์ ์์น
๋ธ๋ผ์ฐ์ ๋ ๋๊ธฐ์ ์ผ๋ก HTML, Css, Javascript๋ฅผ ์ฒ๋ฆฌํ๋ค. ๋๋ฌธ์ script ํ๊ทธ์ ์์น์ ๋ฐ๋ผ ๋ธ๋กํน์ด ๋ฐ์ํ์ฌ DOM ์์ฑ์ด ์ง์ฐ๋ ์ ์์์ ์๋ฏธํ๋ค. ๋๋ฌธ์ body ์์์ ๊ฐ์ฅ ์๋์ script ํ๊ทธ๋ฅผ ์์น์ํค๋ ๊ฒ์ด ์ข๋ค.
- HTML ์์๋ค์ด ์คํฌ๋ฆฝํธ ๋ก๋ฉ ์ง์ฐ์ผ๋ก ์ธํด ๋ ๋๋ง์ ์ง์ฅ์ ๋ฐ์ง ์์ ํ์ด์ง ๋ก๋ฉ ์๊ฐ ๋จ์ถ
- DOM์ด ์์ฑ๋์ง ์์ ์ํ์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ DOM ์์์ ์ ๊ทผ ์ ์ฐธ์กฐ ์ค๋ฅ ๋ฐ์
Hoisting
ํธ์ด์คํ ์ด๋, ํจ์ ์์ ์๋ ์ ์ธ๋ค์ ๋ชจ๋ ๋์ด์ฌ๋ ค ํด๋น ํจ์ ์ ํจ ๋ฒ์์ ์ต์๋จ์ ์ ์ธํ๋ ๊ฒ์ด๋ค.
ํด๋ก์ ๋?
ํด๋ก์ ๋ ๋ฐํ๋ ๋ด๋ถ ํจ์๊ฐ ์์ ์ด ์ ์ธ๋์ ๋์ ํ๊ฒฝ(Lexical environment)์ธ ์ค์ฝํ๋ฅผ ๊ธฐ์ตํ์ฌ, ๊ทธ ์ค์ฝํ ๋ฐ์์ ํธ์ถ๋์ด๋ ์ค์ฝํ์ ์ ๊ทผํ ์ ์๋ ํจ์์ด๋ค.
์ฆ, ์์ ์ ๊ฐ์ธ๊ณ ์๋ ๋ฐ๊นฅ ํจ์์ ๋ณ์์ ์ ๊ทผํ ์ ์๋ ๋ด๋ถ์ ํจ์๋ฅผ ๋ชจ๋ ํด๋ก์ ๋ผ ํ๋ฉฐ, ํด๋ก์ ์ ์ฌ์ฉ์ ํตํด ์ ์ญ ๋ณ์์ ์ฌ์ฉ์ ์ต์ ํ ์์๊ณ , OOP์ ์ฅ์ ์ค ํ๋์ธ ์บก์ํ๊ฐ ๊ฐ๋ฅํ๋ฏ๋ก ๋ฐ์ดํฐ ์๋ํ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ชจ๋ ํจ์๋ ๊ฐ์์ ์คํ ์ปจํ ์คํธ์ ์ค์ฝํ ์ฒด์ธ์ ๊ฐ์ง๊ณ ์๋๋ฐ, ์ธ๋ถ ํจ์์ ๋ํ ์คํ์ด ์ข ๋ฃ๋์ด๋ ์ค์ฝํ ์ฒด์ธ์ ์ ์ง๋๋ค๋ ์๋ฆฌ๋ฅผ ํตํด ํด๋ก์ ์ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
์คํ ์ปจํ ์คํธ
์คํ ์ปจํ ์คํธ๋, ์คํ ๊ฐ๋ฅํ ์ฝ๋๊ฐ ์คํ๋๋ ํ๊ฒฝ์ด๋ค. ์คํ์ค์ธ ์ฝ๋๊ฐ ์คํ ์ปจํ ์คํธ์ ์คํ์ฒ๋ผ ์์ด๋ฉฐ ์คํ ํ๊ฒฝ์ ๊ฐ์ง๊ฒ ๋๋ค.
this
this๋ ์์ ์ด ์ํ ๊ฐ์ฒด ๋๋ ์์ ์ด ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ์๊ธฐ ์ฐธ์กฐ ๋ณ์์ด๋ค.
Restful API
REST๋ HTTP URI๋ฅผ ํตํด ์์์ ๋ช ์ํ๊ณ , HTTP Method๋ฅผ ํตํด ์์์ ๋ํ CRUD Operation์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
API๋ ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ์งํฉ์ ์ ๊ณตํจ์ผ๋ก์จ ํ๋ก๊ทธ๋จ ๊ฐ ์ํธ์์ฉ์ ์ด์งํ๋ฉฐ, ์ ๋ณด ๊ตํ์ ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ฐ๋ผ์ REST API๋ REST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก API ์๋น์ค๋ฅผ ๊ตฌํํ ๊ฒ์ด๋ค.
Promise์ Callback์ ์ฐจ์ด์
๋ ๋ค ์๋ฐ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉ๋๋ ํจํด์ด๋ค. Callback์ ๊ฒฝ์ฐ ํจ์์ ์ฒ๋ฆฌ ์์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ํจ์๋ฅผ ์ค์ฒฉ๋๊ฒ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํด ์ฝ๋ฐฑ ์ง์ฅ์ด ๋ฐ์ํ๋ค๋ ๋จ์ ๊ณผ, ์๋ฌ ์ฒ๋ฆฌ๊ฐ ํ๋ค๋ค๋ ๋จ์ ์ด ์๋ค.
์ด๋ฌํ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ES6์์๋ถํฐ Promise๋ฅผ ์ ์์ผ๋ก ์ฌ์ฉํ๋ค.
Async, Await์ด๋? Promise์์ ์ฐจ์ด์ ์?
Promise๋ฅผ ๋์ฑ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ES8 ๋ฌธ๋ฒ์ด๋ค. ํจ์ ์๋ถ๋ถ์ async ํค์๋๋ฅผ ์ถ๊ฐํ๊ณ ํจ์ ๋ด๋ถ์์ promise ์๋ถ๋ถ์ await ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ด ๊ฒฝ์ฐ promiseโฆthen ๋ณด๋ค ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๋ฉฐ, ์๋ฌ ์ฒ๋ฆฌ์ ๊ฒฝ์ฐ tryโฆcatch๋ฅผ ์ฌ์ฉํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ต์ ํ
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฌ์ฉํด ์ต์ ์ ์ฑ๋ฅ์ ๋ณด์ฅ๋ฐ์ ์ ์๋๋ก ํ๋๋ฐ, ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ์ ์ญ ๋ณ์๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ๋์: ์ ์ญ ๋ณ์๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ๋ถ๊ฐ๋ฅํ ์์ญ์ด๋ค.
- ์ํ์ง ํ์ด๋จธ ๋๋ ์ฝ๋ฐฑ ํจ์๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ๋์: setIntrval์ Clearํด์ฃผ์ง ์์ ํ ๊ณ์ ๋์ํ ๊ฒ์ด๋ค.
- ํด๋ก์
- DOM: DOM ๋ ธ๋๋ฅผ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ก ์ ์ฅํ๋ ๊ฒฝ์ฐ, ํด๋น ๋ฐ์ดํฐ ๊ตฌ์กฐ์์ DOM ๋ ธ๋๋ฅผ ์ฐธ์กฐํ์ง ๋ชปํ๊ฒ๋ ํด์ผ ๋ฉ๋ชจ๋ฆฌ ๋ฆด๋ฆฌ์ฆ๊ฐ ๊ฐ๋ฅํ๋ค.
Mutable๊ณผ Immutable
mutable์ ๋ฐ๋ ์ ์๋ ๋ณ์ ํ์ . immutable์ ๊ทธ ๋ฐ๋์ ๊ฐ๋ . ์๋ฐ์คํฌ๋ฆฝํธ์์ Object์ Array๋ง Mutableํ ํ์ ์ด๊ณ , ๋ค๋ฅธ ์์ ํ์์ ๊ฒฝ์ฐ immutableํ๋ค.
๋น๋๊ธฐ ์ฝ๋ฐฑ
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด๋ก, ๋จ์ผ ํธ์ถ ์คํ์ด ์๋ค. ๋ฐ๋ผ์ ํ ๋ฒ์ ํ๋์ ์ผ๋ง ์ฒ๋ฆฌํ ์ ์๋ฐ. ๋ง์ฝ ๋ธ๋ผ์ฐ์ ์์ ๋ฌด๊ฑฐ์ด ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ ค๊ณ ํ๋ฉด ๋จ์ผ ์ค๋ ๋๋ก ์ธํด ์์ ์ด ๋ธ๋กํน๋ ์ ์๋ค. ์ฆ ๋จนํต์ด ๋ ์ ์๋ค.(๊ธฐ๋ฅ ๋๋ UI๊ฐ ๋ฉ์ถค)
์ด๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํ ํด๊ฒฐ ๋ฐฉ์์ด ๋ฐ๋ก ๋น๋๊ธฐ ์ฝ๋ฐฑ์ด๋ค. ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด์์๋ ์ฌ๋ฌ ์์ ์ ๋์์ ํ ์ ์๋ ๊ฒ์ ๋ธ๋ผ์ฐ์ ๊ฐ Web APIs์ ๊ฐ์ ๊ฒ๋ค์ ์ ๊ณตํ์ฌ ๋น๋๊ธฐ ์์ ์ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํจ์๋ฅผ ๋๊ธฐ ํธ์ถํ๊ฒ ๋๋ฉด ํธ์ถ ์คํ์ ์์ฌ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค. ์ด๋, AJAX๋ setTimeout, DOM event ํจ์๋ฅผ ์คํํ๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํธ์ถ ์คํ์์ Web APIs๋ก ๋ณด๋ด๊ณ ์ ํด์ง ์๊ฐ ๋๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์๊ฐ์ ์์ฐจ์ ์ผ๋ก Callback queue(Task Queue)์ ์ ์ ํ๋ค. Callback ํ์ ์ ์ฌ๋ ํจ์๋ค์ ํธ์ถ ์คํ์ ์์ฌ ์๋ ํ์คํฌ๋ค์ด ๋ชจ๋ ์ฒ๋ฆฌ๋ ๊ฒฝ์ฐ, ์ฐจ๋ก๋ก ์คํ์ ์์ฌ์ ์คํ๋๋ค.
์ด๋ฌํ ์ํ์ด ์ด๋ฒคํธ ๋ฃจํ(Event Loop)์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ด๋ฅผ ํตํด ๋์์ฑ์ ์ง์ํ๋ค.
https://velog.io/@lucas/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84#iterator%EA%B3%BC-generator%EC%9D%84-%EC%84%A4%EB%AA%85%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94
# ์นดํ ๊ณ ๋ฆฌ
- BOJ 36
- Algorithm 12
- CodingTest 11
- Web 9
- Javascript 8
- Vue 7
- React 7
- DBProject 4
- Python 3
- Tech-interview 3
- Express 3
- Next 3
- Github 2
- Django 2
- C 1
- C++ 1
- WebGame 1