Jieunny์ ๋ธ๋ก๊ทธ
Section 1. [๊ธฐ์ ๋ฉด์ ] ๋ณธ๋ฌธ
๐ฃ ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ๋ฏธ๋ฆฌ ์ค๋นํด๋ณด์.
๐ HTML
โ๏ธ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์๋ฆฌ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
โฐ ๋ธ๋ผ์ฐ์ ๋ ๋ ๋๋ง ์์ง์ ์ฌ์ฉํด์ ์์๋ค์ ๋ ๋๋งํ๋ฉฐ, ๋ ๋๋ง ์์ง์ CRP ํ๋ก์ธ์ค๋ฅผ ๊ฑฐ์นฉ๋๋ค.
โ CRP๋ ๋ฌด์์ธ๊ฐ?
โฐ Critical Rendering Path
โฐ ๋ฌธ์๋ฅผ ํ๋ฉด์ ํํํ๊ธฐ ์ํด ๊ฑฐ์น๋ ์ผ๋ จ์ ๊ณผ์ ์ ๋๋ค.
1๏ธโฃ HTML, CSS๋ฅผ ๊ฐ๊ฐ ํ์ฑ ํ DOM Tree์ CSSOM Tree๋ฅผ ๊ตฌ์ถํ๊ณ , js๋ฅผ ์คํํฉ๋๋ค.
2๏ธโฃ DOM Tree์ CSSOM Tree๋ฅผ ๊ฒฐํฉํด ๋ ๋ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํฉ๋๋ค.
3๏ธโฃ ๋ ๋ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๊ฐ ๊ฐ์ง๋ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํฉ๋๋ค. (Layout ๋จ๊ณ)
4๏ธโฃ ๊ณ์ฐํ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฝ์ ๋ก ๋ณํํด ํ๋ฉด์ ๊ทธ๋ฆฝ๋๋ค. (Paint ๋จ๊ณ)
โ ํ์ฑ์ด ๋ฌด์์ธ๊ฐ?
โฐ ๋ฌธ์์ ๋ด์ฉ์ ํ ํฐ์ผ๋ก ๋ถ์ํ๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก DOM Tree, CSSOM Tree๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ ๋๋ค.
โ DOM Tree๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋?
โฐ ์น ํ์ด์ง์ ์์๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ด๋ค์ ์ ๋ฐ์ํ๋ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์ํฉ๋๋ค.
โฐ DOM์ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ ํํ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๋ฌธ์๋ฅผ ์ฝ์ด๋ค์ด๊ณ ์ ์ดํ๊ธฐ ์ข์ต๋๋ค.
โ ๋ ๋๋ง์ด ๋ฌด์์ธ๊ฐ?
โฐ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ๋ฌธ์๋ค์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋๋ง ์์ง์ ํตํด ํ๋ฉด์ ๊ทธ๋ ค์ฃผ๋ ๋์์ ๋๋ค.
โฐ DOM Tree์ CSSOM Tree๋ฅผ ์ด์ฉํด Render Tree๋ฅผ ์์ฑ, ์ด๋ฅผ ๋ฐฐ์นํ๊ณ ๊ทธ๋ฆฝ๋๋ค.
โ ๋ ๋ํธ๋ฆฌ๋ ๋ฌด์์ธ๊ฐ?
โฐ DOM Tree + CSSOM Tree์ ๊ฒฐํฉ์ผ๋ก, ์น ํ์ด์ง์ ๋ํ๋ ์์๋ค์ ์์น๋ฅผ ๊ณ์ฐํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๐จ ์ด๋, display: none ๊ณผ ๊ฐ์ ์์ฑ์ ๋ ๋ํธ๋ฆฌ๋ก ๊ตฌ์ถ๋์ง ์์ต๋๋ค.
โ๏ธ Reflow์ Repaint๊ฐ ์คํ๋๋ ์์ ์ ๋ํด ๋ง์ํด์ฃผ์ธ์.
โฐ Reflow๋ ์๋ฆฌ๋จผํธ ๋ณ๊ฒฝ, CSS๋ณ๊ฒฝ, ์ ์ ํ๋(hover, ํ ์คํธ์ ๋ ฅ, ์ฐฝ ํฌ๊ธฐ ๋ณ๊ฒฝ) ๋ฑ์ ์ํด ํธ๋ฆฌ๊ฑฐ ๋ฉ๋๋ค.
โฐ Repaint๋ Reflow ๊ณผ์ ์ด ๋๋ ํ ๋๋ ์๋ฆฌ๋จผํธ์ ๊ฐ์์ฑ์ ๋ณํ๊ฐ ์์ง๋ง ๋ ์ด์์์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ ๋ ํธ๋ฆฌ๊ฑฐ ๋ฉ๋๋ค.
โ Reflow ๋?
โฐ ์์ฑ๋ DOM ๋ ธ๋์ ๋ ์ด์์ ์์น ๋ณ๊ฒฝ ์ ์ํฅ ๋ฐ์ ๋ชจ๋ ๋ ธ๋์ ์์น๋ฅผ ๋ค์ ๊ณ์ฐํ์ฌ ๋ ๋ ํธ๋ฆฌ๋ฅผ ์ฌ์์ฑํ๋ ๊ณผ์ ์ ๋๋ค.
โฐ Reflow๋ง ์ผ์ด๋๋ฉด ์ค์ ํ๋ฉด์ ๋ฐ์๋์ง ์์ต๋๋ค.
โ Repaint ๋?
โฐ Reflow ๊ณผ์ ์ด ๋๋ ํ ์ฌ์์ฑ๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ณผ์ ์ ๋๋ค.
โฐ Repaint ๊ณผ์ ๊น์ง ๊ฑฐ์ณ์ผ ์ค์ ํ๋ฉด์ ๋ณํ๊ฐ ์ผ์ด๋ฉ๋๋ค.
โ๏ธ โ๏ธ CSS๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ํด <link> ์์๋ฅผ <head> ์์์ ์์ ์์๋ก ํ๊ณ , JS๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ํด <script> ์์๋ฅผ <body> ์์๊ฐ ๋๋๊ธฐ ์ง์ ์ ์์น์ํค๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
โฐ ๋ ๋๋ง์ด ์ ๋๋ก ์ด๋ฃจ์ด์ง๊ฒ ํ๊ธฐ ์ํจ์ ๋๋ค.
โฐ ํ์ฑ ๊ณผ์ ์์ DOM Tree๊ฐ ์์ฑ๋๋ CSSOM Tree๊ฐ ์์ผ๋ฉด ๋ ๋๋ง์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ธฐ CSS ํ์ผ์ ์ฝ์ด์ ๋ ๋๋ง์ ์์ฑํ๊ธฐ ์ํจ์ ๋๋ค. <head> ์ ๋์ด์ผ ํ๋ฉด์ ์ ์ ์๊ฒ ๋น ๋ฅด๊ฒ ์ ๋ฌํ ์ ์์ต๋๋ค.
โฐ ๋ง์ฝ <script>๊ฐ <head> ์์ ์๋ค๋ฉด ํ์ฑ ๊ณผ์ ์์ <script>๋ฅผ ๋ง๋๋ฉด ํ์ฑ์ ๋ฉ์ถ๊ณ <script> ํ์ผ์ ์ฝ์ต๋๋ค.
์ด ๊ณผ์ ์ด ๋ ๋๋ง์ ๋ฐฉํด๊ฐ ๋์ด ์ฌ์ฉ์ ์ ์ฅ์์ ์นํ์ด์ง๊ฐ ๋๋ฆฌ๊ฒ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
โ ๋ ๋๋ง์ด ๋ฌด์์ธ๊ฐ?
โฐ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ๋ฌธ์๋ค์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋๋ง ์์ง์ ํตํด ํ๋ฉด์ ๊ทธ๋ ค์ฃผ๋ ๋์์ ๋๋ค.
โฐ DOM Tree์ CSSOM Tree๋ฅผ ์ด์ฉํด Render Tree๋ฅผ ์์ฑ, ์ด๋ฅผ ๋ฐฐ์นํ๊ณ ๊ทธ๋ฆฝ๋๋ค.
โ๏ธ <li> ์์๋ ์ <ul> ์์์ ์์ ์์์ฌ์ผ๋ง ํ๋์?
โฐ ์๋ฏธ์๋ ์ฝ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ํจ์ ๋๋ค.
โฐ ํ๋ฉด์์ผ๋ก๋ ์ฐจ์ด๊ฐ ์์ง๋ง <ul>์์ <li>๋ฅผ ์ฐ๊ฒ๋๋ฉด ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ๋ดค์ ๋๋ ๋ชฉ๋ก๊ณผ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์๋ค๋ ๊ฒ์ ์ฝ๊ฒ ์ ์ ์์ต๋๋ค.
โ๏ธ id ์์ฑ๊ณผ class ์์ฑ์ ์ฐจ์ด์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์.
โฐ id๋ ํ๋์ ๋ฌธ์์ ํ ์์์๋ง ์ฌ์ฉ๊ฐ๋ฅํ๊ณ , class๋ ์ฌ๋ฌ ์์์ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
โฐ id๋ ๊ฐ๋ณ ์คํ์ผ ์ง์ ์ ์ํด ์ฌ์ฉํ๊ณ , class๋ ์คํ์ผ์ ๋ถ๋ฅ๋ฅผ ์ํด ์ฌ์ฉํฉ๋๋ค.
๐ CSS
โ๏ธ โ๏ธ CSS box model์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์.
โฐ ๋ชจ๋ HTML ์์๋ ๋ฐ์ค๋ชจ์์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ ์ด๋ฅผ ๋ฐ์ค ๋ชจ๋ธ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
โฐ ๋ฐ์ค ๋ชจ๋ธ์ HTML ์์๋ฅผ content, padding, border, margin ์ผ๋ก ๊ตฌ๋ถํฉ๋๋ค.
โ๏ธ ๊ฐ๋จํ ๋ก๊ทธ์ธ ํผ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ด๋ฐ ์์น์ํค๋ ค๋ฉด CSS๋ฅผ ์ด๋ป๊ฒ ์์ฑํด์ผ ํ๋์?(centering)
โฐ Flexbox๋ฅผ ์ฌ์ฉํ ๊ฒ ์ ๋๋ค.
โฐ ๋ก๊ทธ์ธ ํผ ์ปดํฌ๋ํธ์ ๋ถ๋ชจ ์์์ display: flex, justify-content: center, align-items: center ๋ฅผ ์ง์ ํฉ๋๋ค.
โ๏ธ ๊ฐ๋จํ ๋ธ๋ก๊ทธ์์ ์๋์ ๊ฐ์ ๋ ์ด์์์ ๊ตฌ์ฑํ๋ ค๋ฉด CSS๋ฅผ ์ด๋ป๊ฒ ์์ฑํด์ผ ํ๋์?
โฐ Flexbox๋ฅผ ์ฌ์ฉํ ๊ฒ ์ ๋๋ค.
โฐ author-container ์์์ display: flex, flex-direction: row ์์ฑ์ ์ค๋๋ค.
โ๏ธ CSS์์ margin๊ณผ padding์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์.
โฐ margin์ border๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ๊นฅ์ชฝ ์ฌ๋ฐฑ์ ๋งํ๊ณ , padding์ ์์ชฝ ์ฌ๋ฐฑ์ ๋งํฉ๋๋ค.
โ๏ธ CSS์์ position์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์๋ ค์ฃผ์ธ์.
โฐ position ์์ฑ์ ์์๋ฅผ ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ์ ์ง์ ํฉ๋๋ค.
โฐ static, relative, absolute, fixed, sticky ๊ฐ ์์ต๋๋ค.
โ position ์์ฑ ์ข ๋ฅ
1๏ธโฃ static : ์์๋ฅผ ์ผ๋ฐ์ ์ ๋ฌธ์ ํ๋ฆ๋๋ก ๋ฐฐ์นํฉ๋๋ค.
2๏ธโฃ relative : static์ ๊ธฐ์ค์ผ๋ก top, bottom, left, right ๊ฐ ๋งํผ ๋จ์ด์ ธ ๋ฐฐ์นํฉ๋๋ค.
3๏ธโฃ absolute : ๊ฐ์ฅ ๊ฐ๊น์ด ์์น ์ง์ ์์(position์ด static์ด ์๋)๋ฅผ ๊ธฐ์ค์ผ๋ก top, bottom, left, right ๊ฐ ๋งํผ ๋จ์ด์ ธ ๋ฐฐ์นํฉ๋๋ค.
4๏ธโฃ fixed : ์์๋ฅผ ๋ทฐํฌํธ๋ฅผ ๊ธฐ์ค์ผ๋ก top, bottom, left, right ๊ฐ ๋งํผ ๋จ์ด์ ธ ๋ฐฐ์นํ๋ฉฐ, ์คํฌ๋กค์ ํ๋๋ผ๋ ์์น๊ฐ ๋ฐ๋์ง ์์ต๋๋ค.
5๏ธโฃ sticky : ํ์์๋ static๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ ํ๋ฆ์ ๋ฐ๋ฅด์ง๋ง, ์ค์ ๋ ์์น๊ฐ ๋ค๋ค๋ฅด๋ฉด fixed ์ฒ๋ผ ๋ฐฐ์น๋๋ ์์ฑ์ ๋๋ค.
โ ๋ทฐํฌํธ๋?
โฐ ํ์ฌ ํ๋ฉด์ ๋ณด์ฌ์ง๊ณ ์๋ ์์ญ์ ๋งํฉ๋๋ค.
โฐ ๋ทฐํฌํธ ๋ฐ๊นฅ์ ์ฝํ ์ธ ๋ ์คํฌ๋กค ํ๊ธฐ ์ ์ ๋ณด์ด์ง ์์ต๋๋ค.
๐ JavaScript
โ๏ธ ์ค์ฝํ์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์.
โฐ ๋ณ์์ ์ ๊ทผํ ์ ์๋ ๋ฒ์๋ฅผ ๋งํฉ๋๋ค.
โฐ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ, ํจ์ ๋ ๋ฒจ ์ค์ฝํ, ๋ ์์ปฌ ์ค์ฝํ, ๋์ ์ค์ฝํ๊ฐ ์์ต๋๋ค.
โฐ ์์ ์ค์ฝํ๋ ํ์ ์ค์ฝํ์์ ์ ์ธํ ๋ณ์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
โ๏ธ โ๏ธ ๋ฐฐ์ด, ๊ฐ์ฒด๋ฅผ const๋ก ์ ์ธํ๋๋ฐ ์์๋ ์์ฑ์ ์ถ๊ฐํ ์ ์๋ ์ด์ ์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์.
โฐ ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด๋ ์ฐธ์กฐ ์๋ฃํ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ ์์ฒด๊ฐ ์๋ ์ฃผ์๋ฅผ ์ ์ฅํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
โฐ stack์๋ ์ฃผ์๊ฐ, heap์๋ ์ค์ ๋ฐฐ์ด ์์๋ค์ด ์ ์ฅ๋์ด ์๋๋ฐ ์ค์ ๋ฐฐ์ด ์์๋ค์ ๋ณ๊ฒฝํด๋ ์ฃผ์๋ ๋ฐ๋์ง ์์ต๋๋ค.
โ๏ธ ์์ ์๋ฃํ๊ณผ ์ฐธ์กฐ ์๋ฃํ์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์.
โฐ ์์ ์๋ฃํ์ ๊ณ ์ ๋ ์ ์ฅ ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ , ์ฐธ์กฐ ์๋ฃํ์ ์ ์ฅ ๊ณต๊ฐ์ ๋์ ์ ๋๋ค.
โฐ ์์ ์๋ฃํ์๋ number, boolean, string ๋ฑ์ด ์๊ณ ์ฐธ์กฐ ์๋ฃํ์๋ ๋ฐฐ์ด,๊ฐ์ฒด,ํจ์๊ฐ ์์ต๋๋ค.
โฐ ์์ ์๋ฃํ์ stack์ ๊ฐ์ ์ ์ฅํ๊ณ , ์ฐธ์กฐ ์๋ฃํ์ heap์ ์ ์ฅํฉ๋๋ค.
โ๏ธ ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์.
โฐ ์์ ๋ณต์ฌ๋ ์ฃผ์ ๊ฐ์ ๋ณต์ฌํ๋ค๋ ์๋ฏธ์ด๊ณ , ๊น์ ๋ณต์ฌ๋ ์ค์ ๊ฐ์ ๋ณต์ฌํ๋ค๋ ์๋ฏธ์ ๋๋ค.
์์ ๋ณต์ฌ | ๊น์ ๋ณต์ฌ |
์์ฃผ ์ต์ํ๋ง ๋ณต์ฌ | ๋ฐ์ดํฐ ์์ฒด๋ฅผ ํต์งธ๋ก ๋ณต์ฌ |
์ธ์คํด์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์๋ก ์์ฑ๋์ง ์์ (ํ๋ ๋ฐ๊พธ๋ฉด ๋๋จธ์ง ํ๋๋ ๋ฐ๋) |
๋ณต์ฌ๋ ๋ ๊ฐ์ฒด๋ ์์ ํ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฐจ์ง(ํ๋ ๋ฐ๊ฟ๋ ํ๋ ์๋ฐ๋) |
์ฐธ์กฐ ์๋ฃํ | ์์ ์๋ฃํ |
โฐ copy() ๋ฉ์๋๋ ์ฐธ์กฐ ์๋ฃํ๋ ๊น์ ๋ณต์ฌ
๐จ ์ฐธ์กฐ ์๋ฃํ ๋ด๋ถ์ ์ฐธ์กฐ ์๋ฃํ์ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ
โฐ ์ธ๋ถ ์๋ฃํ์ copy()๋ก ๊น์ ๋ณต์ฌ๋ฅผ ํด๋ ๋ด๋ถ ์๋ฃํ์ ์์ ๋ณต์ฌ๊ฐ ์ผ์ด๋๋ค.
(์ฐธ์กฐ ์๋ฃํ์ ๋ณต์ฌํ๋ ๊ฒฝ์ฐ ๋ช ์ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ๋ณต์ฌ๊ฐ ์ผ์ด๋๋ค.)
๐จ ์์ ์๋ฃํ ๋ด๋ถ์ ์ฐธ์กฐ ์๋ฃํ์ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ
โฐ ์์ ์๋ฃํ์ ๊น์ ๋ณต์ฌ, ์ฐธ์กฐ ์๋ฃํ์ ์์ ๋ณต์ฌ๊ฐ ์ผ์ด๋๋ค.
โ๏ธ ํธ์ด์คํ ์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์.
โฐ ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ ๋ณ์๋ ํจ์์ ์ ์ธ๋ฌธ์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง๋ ๊ฒ ๊ฐ์ ํ์์ ๋งํฉ๋๋ค.
โฐ ๋๋ฌธ์ var ๋ณ์ ์ ์ธ, ํจ์์ ์ธ๋ฌธ์ ์ ์ธ๋ณด๋ค ํธ์ถ์ด ๋จผ์ ๋์๋ ์๋ฌ๊ฐ ๋์ง ์์ต๋๋ค.
โ ์ถ๊ฐ ์ค๋ช
โฐ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฝ๋ค๋ฅด ์คํํ๊ธฐ ์ , ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ํ์ํํ๊ณ ๊ตฌ๋ถํ๋ '์คํ ์ปจํ ์คํธ ํ์ฑ' ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค.
์ด ๊ณผ์ ์์ ๋ชจ๋ ๋ณ์(var, let, const, function, class) ์ ์ธ์ด ๋ณ์ ๊ฐ์ฒด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค.
์ฝ๋ ์คํ ์ ์ด๋ฏธ ์ ์ธ์ด ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ ์ธ๋ฌธ๋ณด๋ค ์ฐธ์กฐ ๋ฐ ํธ์ถ์ด ๋จผ์ ๋์๋ ๋์ํ ์ ์์ต๋๋ค.
โ ๋ณ์์ ์์ฑ ๋จ๊ณ?
1๏ธโฃ ์ ์ธ ๋จ๊ณ : ๋ณ์๋ฅผ ์คํ ์ปจํ ์คํธ์ ๋ณ์ ๊ฐ์ฒด์ ๋ฑ๋กํ๋ ๋จ๊ณ
2๏ธโฃ ์ด๊ธฐํ ๋จ๊ณ : ์คํ ์ปจํ ์คํธ์ ์กด์ฌํ๋ ๋ณ์ ๊ฐ์ฒด์ ์ ์ธ ๋จ๊ณ์์ ์์ฑํ ๋ณ์๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง๋๋ ๋จ๊ณ
(์ด ๋จ๊ณ์์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ undefined๋ฅผ ํ ๋นํ๋ค.)
3๏ธโฃ ํ ๋น ๋จ๊ณ : ์ด๊ธฐํ ๋จ๊ณ์์ undefined์ผ๋ก ์ด๊ธฐํ ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ค๋ฅธ ๊ฐ์ ํ ๋นํ๋ ๋จ๊ณ
โ ์คํ ์ปจํ ์คํธ๋?
โฐ ์คํํ ์ฝ๋์ ์ ๊ณตํ ํ๊ฒฝ ์ ๋ณด๋ค์ ๋ชจ์๋์ ๊ฐ์ฒด์ ๋๋ค.
โ var ๋ณ์๋ ์ ํธ์ด์คํ ์ด ์ผ์ด๋๋๊ฐ?
โฐ ์ ์ธ ๋จ๊ณ์ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ๋์์ ์งํ๋์ ์คํ ์ปจํ ์คํธ์ ๋ณ์ ๊ฐ์ฒด์ ๋ณ์๋ฅผ ๋ฑ๋กํ๋ ๋์์ undefined์ผ๋ก ์ด๊ธฐํ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
โ let ๋ณ์๋ ํธ์ด์คํ ์ด ์ผ์ด๋์ง ์๋ ๊ฒ์ธ๊ฐ?
โฐ ํธ์ด์คํ ์ด ์ผ์ด๋ฉ๋๋ค.
โฐ ์ ์ธ ๋จ๊ณ์ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ๋ถ๋ฆฌ๋์ด ์งํ๋๊ธฐ ๋๋ฌธ์, ๋ณ์ ๊ฐ์ฒด์ ๋ณ์๊ฐ ๋ฑ๋ก๋ง ๋๊ณ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋์ง ์์ ์ ๊ทผํ์ง ๋ชปํด ์๋ฌ๊ฐ ๋๋ ๊ฒ์ ๋๋ค.
โ ํจ์ํํ์์ ํธ์ด์คํ ์ด ์ผ์ด๋์ง ์๋ ๊ฒ์ธ๊ฐ?
โฐ ํธ์ด์คํ ์ด ์ผ์ด๋ฉ๋๋ค.
โฐ ํจ์ํํ์์ ๋ณ์์ ํจ์๋ฅผ ํ ๋นํ๋ ํํ์ด๊ธฐ ๋๋ฌธ์ ๋ณ์ ํธ์ด์คํ ์ฌ๋ก๋ก ๋ณผ ์ ์์ต๋๋ค.
var ํจ์์ ๊ฒฝ์ฐ undefined์ผ๋ก ์ด๊ธฐํ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ํจ์๋ก ์ธ์๋์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
โ๏ธ ํด๋ก์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
โฐ ํด๋ก์ ๋ ํจ์์ ํจ์๊ฐ ์ ์ธ๋ ์ดํ์ ํ๊ฒฝ์ ์กฐํฉ์ ๋๋ค.
โ ์ดํ์ ํ๊ฒฝ์ด๋?
โฐ ํจ์๊ฐ ์ ์ธ๋ ์ฃผ๋ณ ํ๊ฒฝ์ ์๋ฏธํฉ๋๋ค. ์ธ๋ถ ํจ์์ ๋ณ์๊ฐ ๋ด๋ถ ํจ์์ ์ดํ์ ํ๊ฒฝ์ ํฌํจ๋ฉ๋๋ค.
โฐ ๋๋ฌธ์ ์ธ๋ถ ํจ์๊ฐ ๋ฆฌํด ๋์ด๋ ๋ด๋ถ ํจ์์ ์ ๊ทผํ์ฌ ์ธ๋ถ ํจ์์ ๋ณ์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
โ ํด๋ก์ ๋ฅผ ์ธ์ ์ฌ์ฉํ๋์?
โฐ private ๋ฉ์๋๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ ํ์ฉํ ์ ์์ต๋๋ค.
โฐ ํด๋ก์ ๋ด์ ์๋ ๋ณ์๋ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ ํด๋ก์ ๋ด์ ์๋ ๋ณ์๋ฅผ ํ์ฉ ํ ์ ์๋ private ๋ฉ์๋๋ง ๋ฐ๋ก ๋ ธ์ถ์์ผ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
โ๏ธ this์ ์ฉ๋ฒ์ ๋ํด ์๋๋๋ก ์ค๋ช ํด์ฃผ์ธ์.
โฐ this๋ ํธ์ถ ๋ฐฉ์์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
โฐ ์คํ ์ปจํ ์คํธ๊ฐ ์์ฑ๋ ๋ this์ ๋ฐ์ธ๋ฉ์ด ์ผ์ด๋๊ฒ ๋ฉ๋๋ค.
โ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์ ํธ์ถ ๋ฐฉ์์ ๋ฐ๋ฅธ this ๋ฐ์ธ๋ฉ
1๏ธโฃ ํจ์ ํธ์ถ : ์ ์ญ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ ๋ฉ๋๋ค. (๊ธฐ๋ณธ ๋ฐ์ธ๋ฉ)
const foo = function(){
console.log(this);
}
foo(); // window
2๏ธโฃ ๋ฉ์๋ ํธ์ถ(ํจ์๊ฐ ๊ฐ์ฒด์ ๋ฉ์๋๋ก ํธ์ถ๋๋ ์ํฉ) : ํด๋น ๋ฉ์๋๋ฅผ ์์ ํ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ ๋ฉ๋๋ค. (์์์ ๋ฐ์ธ๋ฉ)
var person = {
name: 'Lee',
printName: function() {
console.log(this.name);
}
}
person.printName() // Lee
3๏ธโฃ call(), apply(), bind() ํธ์ถ : ๋ด๊ฐ ๋ช ์ํ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ ๋ฉ๋๋ค. (๋ช ์์ ๋ฐ์ธ๋ฉ)
const foo = {
a: 20,
}
function bar() {
console.log(this.a);
}
bar.call(foo); // 20
bar.apply(foo); // 20
โฐ bar ํจ์๋ฅผ ์คํํ ๋์ this ์ปจํ ์คํธ๋ฅผ foo๋ก ์ง์ ๋ฐ์ธ๋ฉ ํด์ฃผ์์ต๋๋ค.
const foo = {
a: 20,
}
function bar() {
console.log(this.a);
}
const bound = bar.bind(foo)
bound(); // 20
โฐ bind ๋ฉ์๋๋ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ฐ์ ์ค๋ธ์ ํธ๋ก this๊ฐ ๋ฐ์ธ๋ฉ๋ ํจ์๋ฅผ ๋ฐํํฉ๋๋ค.
4๏ธโฃ ํ์ดํ ํจ์ : ํ์ดํ ํจ์๋ฅผ ์ ์ํ๋ ์์ ์ ์ปจํ ์คํธ ๊ฐ์ฒด๊ฐ this์ ๋ฐ์ธ๋ฉ ๋ฉ๋๋ค.
const foo = {
a: 20,
bar: function () {
setTimeout(() => {
console.log(this.a);
}, 1);
}
}
foo.bar(); // 20
โฐ setTimeout์ ์ฝ๋ฐฑ์ธ ํ์ดํ ํจ์์ ์ ์ธ์์ this๋ foo ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๊ธฐ ๋๋ฌธ์(lexical scope), ์ฝ๋ฐฑ์ด ์คํ๋ ๋ this๋ foo๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ฉ๋๋ค.
โ ๋ฐ์ธ๋ฉ์ด๋?
โฐ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ๋ ๊ตฌ์ฑ ์์์ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ ํ์ ํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
โ call(), apply(), bind() ?
โฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ function ์ call, apply, bind๋ผ๋ ํ๋กํ ํ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
โ ํ๋กํ ํ์ ์ด๋?
โฐ ํด๋์ค๋ ๊ฐ์ฒด์ ๋ด์ฉ ๋ณต์ฌ ์์ด๋ ์์์ ํจ๊ณผ๋ฅผ ๊ตฌํํ ์ ์๊ฒ ํด์ค๋๋ค.
โ๏ธ JavaScript๋ ์ด๋ค ์ธ์ด์ธ๊ฐ์?
โฐ ์น ํ์ด์ง์์ ๋ณต์กํ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋๋ก ํ๋ ์คํฌ๋ฆฝํ ์ธ์ด ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ ๋๋ค.
โฐ ์ฑ๊ธ ์ค๋ ๋ ์ด๋ฉด์ ๋ ผ ๋ธ๋กํน ์ธ์ด ์ ๋๋ค.
โ ์ฑ๊ธ ์ค๋ ๋๊ฐ ๋ฌด์์ธ๊ฐ?
โฐ ์ค๋ ๋๊ฐ ํ๋๋ฐ์ ์กด์ฌํ์ง ์์ ํ๋ฒ์ ํ๋์ ์์ ๋ง ํ ์ ์์ต๋๋ค.
โ ๋ ผ ๋ธ๋กํน์ด ๋ฌด์์ธ๊ฐ?
โฐ ์ถ๊ฐ์ ์ธ JS ์คํ์ ์ํด JS๊ฐ ์๋ ์์ ์ด ์๋ฃ๋ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋๋ ๊ฒ์ ๋๋ค.
โ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ๋ฌด์์ธ๊ฐ?
โฐ ํน์ ๋ก์ง์ ์คํ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ฃผ์ง ์๊ณ ๋๋จธ์ง ์ฝ๋๋ฅผ ๋จผ์ ์คํํ๋ ์ฒ๋ฆฌ๋ฐฉ์ ์ ๋๋ค.
โ ๋๊ธฐ์ ์ฒ๋ฆฌ๋?
โฐ ๋จผ์ ์์๋ ์ผ์ด ๋ฐํ๋์ผ ๋ค์ ์ผ์ด ์คํ๋๋ ๊ฒ์ ๋งํฉ๋๋ค.
โ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋์ธ๋ฐ ์ด๋ป๊ฒ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ฐ?
โฐ Web API, Task Queue, Event Loop ๋ฑ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ์ ๊ด์ฌํ๋ ์์๋ค ๋๋ฌธ์ ๋๋ค.
โ๏ธ JavaScript์์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฝ๋ฉํ๋ ๋ฒ์ ์๋ ค์ฃผ์ธ์.
โฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จ์ผ ์ค๋ ๋๋ก ๋์ํ๋ฉฐ, ๋น๋๊ธฐ ํ๊ฒฝ์ด ๋ณ๋๋ก ์กด์ฌํฉ๋๋ค.
โฐ ๋น๋๊ธฐ ํ๊ฒฝ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง ์ธ๋ถ์ ์์นํ๋ฉฐ Event loop, Task queue, Job Queue๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
โฐ setTimeout, Fetch ๋ฑ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ API ํจ์๋, Promise, Async๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
โ ๊ด๋ จ ๋ด์ฉ ๋ธ๋ก๊น
โ๏ธ null, undefined, undeclared, NaN ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
1๏ธโฃ undefined : ์ ์ธ์ ๋์์ง๋ง ์์ง ํ ๋น์ด ๋์ง ์์ undefined๋ก ์ด๊ธฐํ ๋ ์ํ์ ๋๋ค.
2๏ธโฃ undeclared : ์ ์ธ์กฐ์ฐจ ๋์ง ์์์ ์ฐธ์กฐ์์ ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ ์ํ์ ๋๋ค.
typeof undeclared ๋ undefined ์ ๋๋ค.
3๏ธโฃ null : ์ ์ธ, ์ด๊ธฐํ ํ ๋ณ์์ null์ ํ ๋นํ ์ํ์ ๋๋ค.
typeof null ์ object ์ ๋๋ค.
4๏ธโฃ NaN : ์ปดํจํฐ์์ ์ซ์๋ก ๋ํ๋ผ ์ ์๋ ์ํ์ ๋๋ค. (Not a Number)
๐ DOM
โ๏ธ innerHTML ๋ฉ์๋์ textContent ๋ฉ์๋์ ์ฐจ์ด์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์.
โฐ innerHTML์ HTMLํ๊ทธ๋ ๊ฐ์ด ๊ฐ์ ธ์ค๊ณ , textContent๋ ๋งํฌ์ ํ๊ทธ๋ฅผ ์ ์ธํ ๋ฌธ์์ด์ ๊ฐ์ ธ์จ๋ค.
๐จ innerHTML vs innerText vs textContent
โฐ innerHTML์ HTML ํ๊ทธ์์๋ค๊น์ง ๊ฐ์ ธ์จ๋ค.
โฐ innerText๋ ํ๊ทธ ๊ฐ์ ๋ถ๋ฌ์ค์ง ์๊ณ , display: none; ํ ๊ฐ๋ ๋ถ๋ฌ์ค์ง ์๋๋ค. (๋งํฌ์ ์ธ์ด๊ฐ ์ ์ฉ๋ ์ํ๋ผ๋ ๋ป)
โฐ textContent ๋ ๋งํฌ์ ํ๊ทธ ์ ์ฉ์ ์๊ด์์ด ๋ฌธ์์ด์ ๋ถ๋ฌ์จ๋ค.
โ๏ธ โ๏ธ event.preventDefault ๋ฉ์๋๋ ์ธ์ , ์ ์ฌ์ฉํ๋์ง ์ค๋ช ํด์ฃผ์ธ์.
โฐ ๊ธฐ๋ณธ์ผ๋ก ์ ์๋ ์ด๋ฒคํธ๋ฅผ ์๋ํ์ง ๋ชปํ๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
โฐ <a>ํ๊ทธ๋ <submit> ํ๊ทธ ์ฒ๋ผ ํ์ด์ง ์ด๋, ์๋ก๊ณ ์นจ ๋ฑ ์๋์ผ๋ก ๋์ํ๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
'CodeStates > learning contents' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S2) Unit 1. [JS] ๊ณ ์ฐจํจ์ (0) | 2023.01.12 |
---|---|
Unit 11. ํ์ด์ง ๋ค์ด์ & ์น ์คํ ๋ฆฌ์ง (0) | 2023.01.04 |
Unit 10. [JS/๋ธ๋ผ์ฐ์ ] ์ด๋ฒคํธ ๊ฐ์ฒด (0) | 2022.12.28 |
Unit 10. [JS/DOM] ์ ํจ์ฑ ๊ฒ์ฌ (0) | 2022.12.27 |
Unit 10. [JS/๋ธ๋ผ์ฐ์ ] DOM ๊ธฐ์ด (0) | 2022.12.26 |