๋ฉํ ๋ง 7๋ฒ์งธ(1)
๐ F-lab ๋ฉํ ๋ง ๊ธฐ๋ก
๋ฉํ ๋ง ์ดํ ๋ถ์กฑํ ๋ถ๋ถ์ ์ฑ์ฐ๊ธฐ ์ํ ๊ธฐ๋ก
์ด๋ฒคํธ ๋ฃจํ, ๋งคํฌ๋ก/๋ง์ดํฌ๋ก ํ ์คํฌ ํ
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋ ๊ธฐ๋ฐ์ ์ธ์ด์ด์ง๋ง, ๊ตฌ๋๋๋ ํ๊ฒฝ(๋ธ๋ผ์ฐ์ , Node.js)๋ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ ๊ณตํ๋ค.
- ์ด ๋, ๊ตฌ๋ ํ๊ฒฝ๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฐ๋ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ฅ์น๊ฐ
์ด๋ฒคํธ ๋ฃจํ
- ์ด๋ฒคํธ ๋ฐ์ ์ ํธ์ถ๋๋ ์ฝ๋ฐฑ ํจ์๋ค์ ๊ด๋ฆฌํ์ฌ ํ์คํฌ ํ์ ์ ๋ฌํ๊ณ ์ฝ์คํ์ด ๋น์์ ๋, ์ฝ์คํ์ผ๋ก ์ ๋ฌํ๋ค.
- ๋งคํฌ๋ก ํ ์คํฌ ํ: DOM, setTimeout ๋ฑ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ฝ๋ฐฑํจ์๊ฐ ๋ด๊ธฐ๋ ํ ์๋ฃ๊ตฌ์กฐ
- ๋ง์ดํฌ๋ก ํ ์คํฌ ํ: Promise, async ๋ฑ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ฝ๋ฐฑํจ์๊ฐ ๋ด๊ธฐ๋ ํ ์๋ฃ๊ตฌ์กฐ
- ์ฝ๋ ์คํ ์ฐ์ ์์: ์ฝ์คํ(๋ฉ์ธ ์ค๋ ๋, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง) > ๋ง์ดํฌ๋ก ํ ์คํฌ ํ > ๋งคํฌ๋ก ํ ์คํฌ ํ
console.log('script start'); // A
setTimeout(function () {
// B
console.log('setTimeout');
}, 0);
Promise.resolve()
.then(function () {
// C
console.log('promise1');
})
.then(function () {
// D
console.log('promise2');
});
console.log('script end'); // E
์ ์ฝ๋์ ์คํ ์์: A E C D B
Variable Environment์ Lexical Environment
- Variable Environment: ์คํ ์ปจํ ์คํธ ์์ฑ ์ ์ด๊ธฐ ์ํ๋ฅผ ์ค๋ ์ท ํํ๋ก ์ ์ฅ(์ด๊ธฐ๊ฐ ์ ์ง), ์ดํ ์ด๋ฅผ ๋ณต์ฌํ์ฌ LE์ ํ ๋น
- Lexical Environment: ์ฝ๋ ์คํ ๋์ค์ ๋ณ๊ฒฝ๋๋ ์ฌํญ์ด ์ฆ์ ๋ฐ์, ๊ทธ๋ ๊ธฐ์ ์ฃผ๋ก LE๋ฅผ ํ์ฉ
[[Prototype]]์ ์ง์ ๋ณ๊ฒฝํ์ ๋์ ๋จ์
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์์ฑ์ ์ ๊ทผ์ ์ต์ ํํ๋ ๋ฐฉ์์ ํน์ฑ ์, ๊ต์ฅํ ์ฑ๋ฅ์ ์ ํ์ํค๋ ๊ณผ์ ์ด๋ค.
- ๋ฐ๋ผ์ Object.create(_.prototype)์ ํตํด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋๋ก ํ๋ ๊ฒ์ด ์ข๋ค.
์น ์ปดํฌ๋ํธ์ ๋ผ์ดํ์ฌ์ดํด
- ๋ผ์ดํ์ฌ์ดํด: ๋ง ๊ทธ๋๋ก ์๋ช
์ฃผ๊ธฐ๋ฅผ ๋ปํ๋ฉฐ, ์น์์์ ๋ผ์ดํ์ฌ์ดํด์
ํ ํ๋ฉด์ด ์์ฑ๋๊ณ ์ฌ๋ผ์ง๊ธฐ๊น์ง์ ๊ณผ์
์ด๋ค. - ์ฆ, ์ปดํฌ๋ํธ ๋ผ์ดํ์ฌ์ดํด์ด๋ ์ปดํฌ๋ํธ์ ์์ฑ๋ถํฐ ์ ๊ฑฐ๋ ๋๊น์ง์ ๊ณผ์ ์ ๋งํ๋ฉฐ, ์ด ๊ณผ์ ์์ ์ด๋ฒคํธ๋ฅผ ํธ๋ค๋งํ ์ ์๋ ๋ค์ํ API๋ฅผ ์ ๊ณตํ๋ค.
- ์น ์ปดํฌ๋ํธ ๋ผ์ดํ์ฌ์ดํด
- connectedCallback(): customElement๊ฐ DOM ์์๋ก ์ถ๊ฐ๋ ๋๋ง๋ค ํธ์ถ๋๋ API
- disconnectedCallback(): customElement๊ฐ DOM์์ ์ ๊ฑฐ๋์์ ๋๋ง๋ค ํธ์ถ๋๋ API
- attributeChangedCallback(name, oldVlaue, newValue): ์ธ์๋ก ์์ฑ์ด๋ฆ, ์ด์ ์์ฑ๊ฐ, ์ดํ ์์ฑ๊ฐ์ ๋ฐ์ผ๋ฉฐ ์์ฑ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ํธ์ถ๋๋ API
- static get observedAttributes(): ๋ฐํ๊ฐ์ผ๋ก [โ์์ฑ์ด๋ฆโ]ํํ๋ฅผ ์ง์ ํด์ฃผ์ด์ผํ๋ฉฐ ํด๋นํ๋ ์์ฑ์ด๋ฆ์ ๋ณํ๋ฅผ ๊ฐ์งํ ์ ์๊ฒ ๋๋ค.
- adoptedCallback(): customElement๊ฐ ๋ค๋ฅธ document๋ก ์ด๋๋ ๋๋ง๋ค ํธ์ถ๋๋ API
๋ฆฌํ๋ก์ฐ์ ๋ฆฌํ์ธํธ
- ๋ฆฌํ๋ก์ฐ: ๋ ์ด์์์ ๋ค์ ๊ณ์ฐํ๋ ๊ฒ์ผ๋ก ๋ ธ๋์ ์ถ๊ฐ/์ญ์ , ์์ ํฌ๊ธฐ/์์น ๋ณ๊ฒฝ, ์๋์ฐ ๋ฆฌ์ฌ์ด์ง ๋ฑ ๋ ์ด์์์ ์ํฅ์ ์ฃผ๋ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋ ์คํ๋๋ค.
- ๋ฆฌํ์ธํธ: ์ฌ๊ฒฐํฉ๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ ํ์ธํธ๋ฅผ ํ๋ ๊ฒ์ ๋งํ๋ค.
์น ์ปดํฌ๋ํธ์์๋ shadow DOM์ด๋ผ๋ ๊ฐ ์ปดํฌ๋ํธ๋ง๋ค์ ๋ ๋ฆฝ์ ์ธ DOM์ ๋์ด ์ ๊ณผ์ ์ด ํด๋นํ๋ ์ปดํฌ๋ํธ์์๋ง ์ผ์ด๋๊ฒ ํ์๋ค.
reset CSS์ normalize CSS
๋จผ์ ์ด ๋์ด ํ์ํ ์ด์ ๋ฅผ ์์์ผํ๋ค.
์๊ฒ ๋ชจ๋ฅด๊ฒ ์ด๋ฏธ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ง๋ค ์ ๊ณตํ๋ stylesheet์ด ์๋๋ฐ ์ด๋ฅผ user-agent stylesheet
๋ผ๊ณ ํ๋ค.
์ด๋ฐ ๊ธฐ๋ณธ์ ์ธ ์คํ์ผ์ํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋, ์ 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
- reset css: ๋ง ๊ทธ๋๋ก ๋ชจ๋ ์คํ์ผ์ํธ๋ฅผ ์ด๊ธฐํํด๋ฒ๋ฆฌ๋ ๊ฒ! ์์ ํ์ ๋ํ์ง๋ฅผ ๋ง๋ค์ด์
๋ด๊ฐ ๋ค์ ๊ทธ๋ฆฌ๊ฒ ๋ค
ํ ๋ ์ฌ์ฉํ๋ค. - normalize css: ๋ฆฌ์
ํ๋ ๊ฒ์ด ์๋, ๋ธ๋ผ์ฐ์ ์ ์คํ์ผ์ ์ ๋นํ
๋น์ทํ๊ฒ ๋ณด์ด๋๋ก
๋ง๋ ๋ค. ๊ตณ์ด ๋ค ์ง์ฐ์ง๋ง๊ณ , ์ ๋นํ ๊ณตํต๋ ์ปค์คํฐ๋ง์ด์ง ์คํ์ผ์ํธ๋ฅผ ์ ์ฉํ์๋ ๋ฐฉ๋ฒ!
์ ๋ง ๊ณต๋ถํ๊ณ ํ๋ฉด ํ ์๋ก ๋ชจ๋ฅด๋ ๊ฒ ํฌ์ฑ์ด๊ณ ์์์ผํ ๊ฒ ํฌ์ฑ์ด๋ค. ์ฌ์ค์ ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ณต๋ถํ๋ ์ฌ๋ฏธ๊ฐ ์๊ธฐ๋ ํ๋ค. ์ด๋ฒ ๋ฉํ ๋ง์์ ๋์จ ํผ์งํผ์งํ ์ง๋ฌธ๋ค์ด ๋ช๊ฐ ๋ ์์ด์ ์ถํ 2๋ฒ์งธ ๊ธ๋ก ์์ฑ ์์ ์ด๋ค.
๐๏ธ Reference
์ด๋ฒคํธ๋ฃจํ, ๋งคํฌ๋ก/๋ง์ดํฌ๋ก ํ์คํฌ ํ