๐ช ๋ค์ด๊ฐ๋ฉฐ
๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์ ์ ๋ํด์ ์์๋ณด์ ! ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์ ์ ๋ณต์กํ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค.
๐ชฝ ๋ ๋๋ง ๊ณผ์
- DOM ํ์ฑ: HTML์ ํ์ฑํ์ฌ DOM ํธ๋ฆฌ(๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ)๋ฅผ ์์ฑ
- CSSOM ์์ฑ: CSS๋ฅผ ํ์ฑํ์ฌ CSSOM ํธ๋ฆฌ(์คํ์ผ ๊ท์น ํธ๋ฆฌ)๋ฅผ ๋ง๋ฌ
- ๋ ๋ ํธ๋ฆฌ ์์ฑ: DOM๊ณผ CSSOM์ ๊ฒฐํฉํ์ฌ ํ๋ฉด์ ๊ทธ๋ฆด ์์๋ฅผ ํฌํจํ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋ฌ
- ๋ ์ด์์: ๊ฐ ์์์ ํฌ๊ธฐ์ ์์น๋ฅผ ๊ณ์ฐ
- ํ์ธํ : ๊ณ์ฐ๋ ์คํ์ผ๊ณผ ์์น์ ๋ฐ๋ผ ํ๋ฉด์ ๊ทธ๋ฆผ
- ํฉ์ฑ ๋จ๊ณ: ๋ณต์กํ ๋ ์ด์ด๋ฅผ ๊ด๋ฆฌํ์ฌ ์ต์ ํ๋ ํ๋ฉด ์ถ๋ ฅ
๐ฟ ์ด๋ฒคํธ ๋ฃจํ
๋ ๋๋ง ๊ณผ์ ์ HTML๊ณผ CSS๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด์ ํ์ํ๋ ๋ฐ ์ง์คํ๊ณ , ์ด๋ฒคํธ ๋ฃจํ๋ ๋น๋๊ธฐ ์์ ์ ๊ด๋ฆฌํ์ฌ ์ฌ์ฉ์ ์ธํฐ๋์ ์ ๋ํ ๋ฐ์์ฑ์ ์ ์งํฉ๋๋ค. ์ด๋ฒคํธ ๋ฃจํ๋ ๋ ๋๋ง ๊ณผ์ ์ ์ํ๊ณผ ๋ณ๊ฐ๋ก ์๋ํ์ฌ, ์ฝ ์คํ์ด ๋น์ด ์์ ๋ ๋๊ธฐ ์ค์ธ ์์ ์ ์คํํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐํ์ ํ๊ฒฝ์ ์ฃผ๋ก ๋ธ๋ผ์ฐ์ ๋๋ Node.js์ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ํด ์ ๊ณต๋ฉ๋๋ค. ๊ฐ ๋ธ๋ผ์ฐ์ ๋ ์์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค. Node.js๋ ์๋ฒ ์ธก ์๋ฐ์คํฌ๋ฆฝํธ ์คํ์ ์ํ ๋ฐํ์ ํ๊ฒฝ์ผ๋ก, V8 ์์ง์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ํ์ผ ์์คํ , ๋คํธ์ํน ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ฌ๊ธฐ์๋ ๋ธ๋ผ์ฐ์ ์ ์์ง(์: V8, SpiderMonkey), ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ์ฝ ์คํ, ์ด๋ฒคํธ ๋ฃจํ ๋ฐ API๊ฐ ํฌํจ๋ฉ๋๋ค. ์ด ํ๊ฒฝ์ ์ฝ๋๊ฐ ์คํ๋๊ณ , ๋น๋๊ธฐ ์์ ์ด ์ฒ๋ฆฌ๋๋ฉฐ, DOM ๋ฐ CSSOM๊ณผ ์ํธ ์์ฉํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ค์ ๋ก ๋์ํ ์ ์๋ ๊ธฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค.
- ์คํ ์ปจํ ์คํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์๊ฐ ์คํ๋ ๋ ์์ฑ๋๋ ํ๊ฒฝ์ผ๋ก, ํด๋น ํจ์์ ๋ณ์, ์ค์ฝํ, this ๊ฐ ๋ฑ์ ํฌํจํฉ๋๋ค.
- ์ฝ ์คํ(LIFO)์ ํ์ฌ ์คํ ์ค์ธ ํจ์์ ๊ทธ ํจ์์ ์คํ ์ปจํ ์คํธ๋ฅผ ์ถ์ ํ๋ ๊ตฌ์กฐ๋ก, LIFO(Last In, First Out) ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค.
ํ์ฌ ์คํ ์ค์ธ ํจ์๊ฐ ์์ด๋ฉฐ, ๋ง์ง๋ง์ ํธ์ถ๋ ํจ์๊ฐ ๊ฐ์ฅ ๋จผ์ ์คํ๋ฉ๋๋ค. ๊ฐ ํจ์๋ ์๋ฃ๋๋ฉด ์คํ์์ ์ ๊ฑฐ๋ฉ๋๋ค.
- ํ์คํฌ ํ(FIFO)๋ ๋น๋๊ธฐ ์์ (์: setTimeout, Promises)์ ์ฝ๋ฐฑ์ ๋๊ธฐ์ํค๋ ํ์ ๋๋ค. ์ด๋ฒคํธ ๋ฃจํ๋ ์ฝ ์คํ์ด ๋น์ด ์์ ๋ ํ์คํฌ ํ์์ ๋๊ธฐ ์ค์ธ ์์ ์ ๊ฐ์ ธ์ ์คํํฉ๋๋ค.
๋น๋๊ธฐ ์์ ์ด ์๋ฃ๋๋ฉด ์ฝ๋ฐฑ ํจ์๊ฐ ํ์คํฌ ํ์ ์ถ๊ฐ๋ฉ๋๋ค. ์ดํ ์ฝ ์คํ์ด ๋น์ด ์์ ๋, ํ์คํฌ ํ์ ์ฒซ ๋ฒ์งธ ์์ ์ด ์ฝ ์คํ์ผ๋ก ์ด๋ํ์ฌ ์คํ๋ฉ๋๋ค.
์ฝ ์คํ
โ
โโ main() โโโ
โ โ
โ โโ functionA() โโโ
โ โ โ
โ โ โโ functionB() โโโ
โ โ โ โ
โ โ โ โโ functionC()
โ โ โ โ
โ โ โ โโ ... (์๋ฃ)
โ โ โ
โ โ โโ ... (์๋ฃ)
โ โ
โ โโ ... (์๋ฃ)
โ
โโ ํ์คํฌ ํ
โ
โโ setTimeout(() => { ... }) โโโ
โ โ
โโ Promise.resolve(() => { ... })
โ โ
โโ ... (์๋ฃ)
โฝ๏ธ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฝ๋ ์คํ์ ์ํด CPU๋ฅผ ํ์ฉํฉ๋๋ค. ์์ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํด์ํ๊ณ , ์ด๋ฅผ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํํ ํ, CPU์ ๋ช ๋ น์ด๋ฅผ ์ ์กํ์ฌ ์ค์ ์ฐ์ฐ์ ์ํํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์์ง์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ๊ฐ๋น์ง ์ปฌ๋ ์ ๋ฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๊ฐ์ ๋ค์ํ ์์ ์ ๊ด๋ฆฌํ๋ฉฐ, CPU์ ์ฐ์ฐ ๋ฅ๋ ฅ์ ์ต๋ํ ํ์ฉํ์ฌ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ฝ๋๋ฅผ ์คํํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ํธ์์ฉํ๋ฉฐ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ RAM๋ ์ฌ์ฉํฉ๋๋ค. RAM์ ํ๋ก๊ทธ๋จ ์คํ ์ค์ ํ์ํ ๋ฐ์ดํฐ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์คํ๋ ๋, ๋ณ์, ํจ์, ๊ฐ์ฒด ๋ฐ ๋ฐฐ์ด ๋ฑ์ ์ ๋ณด๊ฐ RAM์ ์ ์ฅ๋์ด CPU๊ฐ ํ์ํ ๋ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํฉ๋๋ค. ์ด ๊ณผ์ ์์ RAM์ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ๊ณผ ๋ฐ์์ฑ์ ๋์ด๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
๐ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์ ๊ณผ์
CPU๊ฐ ์ฒ๋ฆฌํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ๊ณ์ฐ
- ์ฐ์ ์ฐ์ฐ: ๋ง์ , ๋บ์ , ๊ณฑ์ , ๋๋์ ๋ฑ ๊ธฐ๋ณธ์ ์ธ ์ํ ์ฐ์ฐ์ ์ํํฉ๋๋ค.
- ์กฐ๊ฑด๋ฌธ: if, switch ๋ฑ์ ์กฐ๊ฑด๋ฌธ์ ํ๊ฐํ์ฌ ์ฝ๋ ํ๋ฆ์ ๊ฒฐ์ ํฉ๋๋ค.
- ๋ฐ๋ณต๋ฌธ: for, while ๋ฑ์ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ ํน์ ์์ ์ ๋ฐ๋ณต ์ํํฉ๋๋ค.
- ํจ์ ํธ์ถ: ํจ์๋ฅผ ํธ์ถํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ฌ ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ๋น๊ต ์ฐ์ฐ: ๊ฐ์ ๋น๊ต๋ฅผ ํตํด ์กฐ๊ฑด์ ํ๊ฐํ๊ณ ์คํ ํ๋ฆ์ ์ ์ดํฉ๋๋ค.
function calculateSum(a, b) {
// CPU๊ฐ ํจ์์ ์คํ ์ปจํ
์คํธ๋ฅผ ์์ฑ
return a + b; // CPU๊ฐ ๋ง์
์ฐ์ฐ์ ์ํ
}
// RAM์ ๋งค๊ฐ๋ณ์ 5์ 10 ์ ์ฅ ํ ํจ์ ํธ์ถ
const result = calculateSum(5, 10); // CPU๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ณ์ฐํ๊ณ RAM์ ์ ์ฅํ์ฌ CPU๊ฐ ํ์ํ ๋ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํฉ๋๋ค.
RAM์์ ์ฒ๋ฆฌํ๋ ์ญํ
- ๋ฐ์ดํฐ ์ ์ฅ: ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ๋ณ์, ๊ฐ์ฒด, ๋ฐฐ์ด ๋ฑ์ ์ ์ฅํฉ๋๋ค. ์ด ์ ๋ณด๋ CPU๊ฐ ํ์ํ ๋ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ์์ ์ค๊ฐ ๊ฒฐ๊ณผ: ์ฐ์ฐ ๊ฒฐ๊ณผ๋ ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ CPU์ ๊ณ์ฐ์ ์ง์ํฉ๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ์ : ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ฌ RAM์ ํจ์จ์ฑ์ ๋์ ๋๋ค.
- ์๋ ํฅ์: RAM์ CPU์์ ๋น ๋ฅธ ๋ฐ์ดํฐ ์ ์ก์ ํตํด ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
// RAM์ ๋ฐฐ์ด์ ์ ์ฅ
let numbers = [1, 2, 3, 4, 5]; // ๋ฐฐ์ด์ ์์๋ค์ด RAM์ ์ ์ฅ๋จ
// ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ RAM์์ ์กฐํํ์ฌ CPU๊ฐ ๊ธธ์ด๋ฅผ ๊ณ์ฐ
let length = numbers.length; // RAM์์ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๊ฐ์ ธ์ด
// ๋ฐฐ์ด์ ์ ์์ ์ถ๊ฐ
numbers.push(6); // RAM์ 6์ ์ถ๊ฐํ์ฌ ๋ฐฐ์ด์ ์
๋ฐ์ดํธ
// ๋ฐฐ์ด ์์๋ฅผ ๋ฐ๋ณต ์ฒ๋ฆฌํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์์ฑ
numbers.forEach((number) => {
// ๊ฐ ์์์ ์ฐ์ ์ฐ์ฐ(์: ๊ณฑํ๊ธฐ)์ CPU๊ฐ ์ํํ๊ณ , RAM์์ ๊ฐ์ ๊ฐ์ ธ์ด
console.log(number * 2); // RAM์์ ๊ฐ์ ์ฝ์ด์ CPU๊ฐ ์ถ๋ ฅ
});
'๐ก ์์๋๋ฉด ์ข์ ๊ฒ๋ค > ๋ฉด์ ๋๋น' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript] - this์ ์๋ฏธ (0) | 2024.10.04 |
---|---|
[TypeScript] - interface์ type alias์ ์ฐจ์ด์ (0) | 2024.09.30 |