์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด๋ ๋ค๋ฅธ ์ ์ ํ์ ์ธ์ด์์ ํํ ๋ณผ ์ ์๋ ํด๋์ค๋ ๊ตฌ์กฐ์ฒด์ ๋ค๋ฅด๊ฒ ๋ฐํ์ ๋์ ์์ ๋กญ๊ฒ ์์ฑ, ์์ , ํ์ฅ๋ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋์์ ๊ฐ์ฒด๋ฅผ ์ ์ธํ๊ณ ๋์ ์ธ์ ๋ ์ง ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์ ์๋ค.
const person = { name: "Jongbin", age: 29 };
person.job = "Programmer";
๊ฐ์ฒด person์ ์์ฑํ๊ณ ์ดํ์ job์ด๋ผ๋ ์๋ก์ด ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๋ค. Javascript์ ์ด๋ฐ ์ ์ฐ์ฑ ๋๋ถ์ ๊ฐ๋ฐ์๋ ์ด๋ค ์ํฉ์์๋ ๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค. ๋์ ํ์ดํ(dynamic typing)๊ณผ ๋์ ๊ฐ์ฒด ๊ตฌ์กฐ(dynamic object structure)๊ฐ ๊ฒฐํฉ๋ ์ด๋ฐ ํน์ฑ์ผ๋ก ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
ํ์ง๋ง ์ด๋ฐ ๋์ ์ธ ํน์ฑ์๋ ์ฑ๋ฅ์ ๊ดํ ๋ฌธ์ ๊ฐ ์กด์ฌํ๋ค. ์ปดํ์ผ ์์ ์ ๊ฐ์ฒด์ ๊ตฌ์กฐ๊ฐ ๊ณ ์ ๋์ง ์๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ฐํ์์์ ๋งค๋ฒ ๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ํ์ธํ๊ณ ํ๋กํผํฐ์ ์ ๊ทผํด์ผ ํ๋ค. ๋ง์ฝ ๋์ผํ ์ฝ๋์์ ์ฌ๋ฌ ๋ฒ ๊ฐ์ ํ๋กํผํฐ์ ์ ๊ทผํ๋ค๊ณ ํ๋๋ผ๋ ๊ฐ์ฒด์ ๊ตฌ์กฐ๊ฐ ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ๋งค๋ฒ ๊ทธ ๊ตฌ์กฐ๋ฅผ ํ์ธํด์ผ ํ๋๋ฐ ์ด๋ก ์ธํด ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
โ ํ๋ ํด๋์ค(Hidden Classes)
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ด๋ฌํ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก ํ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค. ํ๋ ํด๋์ค๋ ๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ถ์ ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ด๋ถ์ ์ธ ์ต์ ํ ๊ฐ๋ ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ๊ทธ ๊ฐ์ฒด์ ๊ตฌ์กฐ(ํ๋กํผํฐ ์ด๋ฆ, ์์ ๋ฑ)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํด๋์ค๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๊ณ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ผ๋ฆฌ๋ ๋์ผํ ํ๋ ํด๋์ค๋ฅผ ๊ณต์ ํ๋๋ก ํ๋ค. ์ด๋ก์จ ์์ง์ ๊ฐ ๊ฐ์ฒด๋ง๋ค ๋งค๋ฒ ์๋ก์ด ๊ตฌ์กฐ๋ฅผ ํ์ธํ ํ์ ์์ด ๊ฐ์ ํ๋ ํด๋์ค๋ฅผ ์ฐธ์กฐํ๋ ๊ฐ์ฒด์ ๋ํด ๋์ผํ ๋ฐฉ์์ผ๋ก ํ๋กํผํฐ์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
ํ๋ ํด๋์ค์๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์กด์ฌํ๋ค.
- ๊ฐ์ฒด๋ ๋ฐ๋์ ํ๋์ ํ๋ ํด๋์ค๋ฅผ ์ฐธ์กฐํ๋ค.
- ํ๋ ํด๋์ค๋ ๊ฐ ํ๋กํผํฐ์ ๋ํด ๋ฉ๋ชจ๋ฆฌ ์คํ์ ์ ๊ฐ์ง๊ณ ์๋ค.
- ๋์ ์ผ๋ก ์๋ก์ด ํ๋กํผํฐ๊ฐ ๋ง๋ค์ด์ง ๋, ํน์ ๊ธฐ์กด ํ๋กํผํฐ๊ฐ ์ญ์ ๋๊ฑฐ๋ ๊ธฐ์กด ํ๋กํผํฐ์ ๋ฐ์ดํฐ ํ์ ์ด ๋ฐ๋ ๋๋ ์ ๊ท ํ๋ ํด๋์ค๊ฐ ์์ฑ๋๋ฉฐ, ์ ๊ท ํ๋ ํด๋์ค๋ ๊ธฐ์กด ํ๋กํผํฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์งํ๋ฉด์ ์ถ๊ฐ์ ์ผ๋ก ์ ํ๋กํผํฐ์ ์คํ์ ์ ๊ฐ์ง๊ฒ ๋๋ค.
- ํ๋ ํด๋์ค๋ ํ๋กํผํฐ์ ๋ํด ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ ๋ ์ฐธ์กฐํด์ผ ํ๋ ํ๋ ํด๋์ค์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ๋๋ค.
- ๊ฐ์ฒด์ ์๋ก์ด ํ๋กํผํฐ๊ฐ ๋ง๋ค์ด์ง๋ฉด, ํ์ฌ ์ฐธ์กฐํ๊ณ ์๋ ํ๋ ํด๋์ค์ ์ ํ ์ ๋ณด๋ฅผ ํ์ธํ ํ, ํ์ฌ ํ๋กํผํฐ์ ๋ํ ๋ณ๊ฒฝ์ด ์ ํ ์ ๋ณด์ ์กฐ๊ฑด๊ณผ ์ผ์นํ๋ฉด, ๊ฐ์ฒด์ ์ฐธ์กฐ ํ๋ ํด๋์ค๋ฅผ ์กฐ๊ฑด์ ๋ช ์๋ ํ๋ ํด๋์ค๋ก ๋ณ๊ฒฝ์ํจ๋ค.
์คํ์ (offset)์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์์ ํน์ ์์น๋ฅผ ๋ํ๋ด๋ ๊ฐ๋ . ์ฝ๊ฒ ๋งํด์, ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๊ธฐ์ค์ (๋ฉ๋ชจ๋ฆฌ์ ์์์ )์ผ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ ๋๋ ์ฐจ์ด๋ฅผ ์๋ฏธํ๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ ๊ฐ์ฒด๊ฐ ์์ ๋, obj1๊ณผ obj2๋ ๋์ผํ ํ๋กํผํฐ(x, y)์ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ฏ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ด ๋ ๊ฐ์ฒด์ ๋ํด ๋์ผํ ํ๋ ํด๋์ค๋ฅผ ์์ฑํ๋ค.
const obj1 = { x: 10, y: 20 };
const obj2 = { x: 30, y: 40 };
ํ๋กํผํฐ๊ฐ ์ถ๊ฐ๋๋ฉด ๋์ด์ ๊ฐ์ ๊ฐ์ ํ๋ ํด๋์ค๋ฅผ ์ฐธ์กฐํ์ง ์๋๋ค.
obj2์ ํ๋กํผํฐ z๊ฐ ์ถ๊ฐ๋๋ฉด์ obj2์ ๊ฐ์ฒดํ์์ ์ํ ์๋ก์ด ํ๋ ํด๋์ค๊ฐ ์์ฑ๋๋ค. ์ต์ด์ ์์ฑ๋ ๋๋ฅผ ์ ์ธํ๊ณ ํ๋กํผํฐ๊ฐ ์ถ๊ฐ๋๋ฉด ์๋ก์ด ํ๋ ํด๋์ค๊ฐ ์์ฑ๋๊ฒ ๋๋ค.
obj2.z = 50;
// obj1 = { x: 10, y: 20 };
// obj2 = { x: 30, y: 40, z: 50 };
๐ง ๊ทธ๋ฐ๋ฐ ์ด ํ๋ ํด๋์ค๋ฅผ ์ด์ฉํ๋ฉด ์ ์ฑ๋ฅ์ด ํฅ์๋๋ ๊ฒ์ผ๊น?
์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ ์ฌ์ฉํ ๋ ์ค์ ๋ก๋ ๋ณ์์ ์ ๊ทผํ๋ ๊ฒ์ด ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. obj1์ ํ๋กํผํฐ x์ ์ ๊ทผํ๋ ค๊ณ ํ ๋, ๋ณ์๋ฅผ ํตํด์ ํํํ์ง๋ง ์ค์ ๋ก๋ ์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ์์ ์์นํ๋ ์ด๋๊ฐ์ ์ ๊ทผํด์ ์ค์ ๊ฐ์ 10์ ์์๋ด์ผ ํ๋ค.
๊ฒฐ๊ตญ ํ๋ ํด๋์ค๋ ์คํ์ ์ ๊ฐ์ง๊ณ ์๋ ์๋ ๊ตฌ์กฐ์ฒด์ด๋ฏ๋ก ์ด ์คํ์ ์ ์ด์ฉํด์ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์์น์ ๋ ๋นจ๋ฆฌ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
์ด๋ค ์๋ณ์๋ ์ค์ ๋ก ๊ฐ์ ๊ฐ๋ฅดํค์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ์์ ์ค์ ๋ฐ์ดํฐ์ ์ฒซ ์์น๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด ๋๋ค. ์ฌ๊ธฐ์ ํ๋ ํด๋์ค์ ์คํ์ ๊ฐ์ ๊ฐ์ง๊ณ ๋ด๊ฐ ์ ๊ทผํ๋ ค๊ณ ํ๋ ๋ฉ๋ชจ๋ฆฌ์ฃผ์๋ฅผ ๋ฐ๋ก ๊ตฌํ ์ ์๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ ๊ฐ์ฒด์ด๋ฉด์ ๋์ผํ ํ๋ ํด๋์ค๋ฅผ ๊ณต์ ํ๋๋ผ๋ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
์ฌ๊ธฐ์ ํ๊ฐ์ง ์๋ฌธ์ ์ด ๋ ๋ค. ํ๋กํผํฐ์ ์ด๋ฆ์ ๊ฐ์ ์ ์์ผ๋, ๊ฐ์ง๊ณ ์๋ ๊ฐ์ด ๋ค๋ฅผํ ๋ฐ ์ด๋ป๊ฒ ๊ฐ์ฒด๋ง๋ค ๋์ผํ ํ๋ ํด๋์ค๋ฅผ ๊ณต์ ํ ์ ์์๊น?
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ด๋ค.
const obj1 = {
x: "aaaaaaaaaaaaaaaaaaaaaa...",
y: { y1: 1, y2: 2, ... }
};
const obj2 = { x: 30, y: 40 };
obj1๊ณผ obj2๋ ํ๋กํผํฐ์ ์ด๋ฆ์ด ๊ฐ๊ณ ๊ตฌ์กฐ๊ฐ ๋์ผํ๊ธฐ ๋๋ฌธ์ ๋์ผํ ํ๋ ํด๋์ค๋ฅผ ๊ณต์ ํ ๊ฒ์ด๋ค. ๋์ผํ ํ๋ ํด๋์ค๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ ํ๋กํผํฐ๋ง๋ค ์คํ์ ์ด ๋์ผํ ๊ฒ์ด๋ค. ์์๊ฐ(number, string), ๊ฐ์ฒดํ์ ์ผ๋ก ๊ฐ์ง๊ฐ์์ธ๋ฐ ์ด๋ป๊ฒ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ์์น์ ์ ๊ทผํ ์ ์์๊น?
๊ฒฐ๋ก ์ ๋จผ์ ์ด์ผ๊ธฐํ์๋ฉด, ์ค์ ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ ์ ์ฅ๋๋ ๋ฐฉ์์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ ํ ๋ฌธ์ ๊ฐ ์๋ค.
๐ ์๋ฐ์คํฌ๋ฆฝํธ ์์๊ฐ(Primitive Values)์ ์ ์ฅ ๋ฐฉ์
์๋ฐ์คํฌ๋ฆฝํธ์ ์์๊ฐ์ number, string, boolean, null, undefined, symbol ๋ฑ์ ํฌํจํ๋ค. ์ด ๊ฐ๋ค์ ๋ณดํต ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
- ์ซ์(number)๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์ 64๋นํธ ๋ถ๋์์์ ๊ฐ(IEEE 754 ํ์ค)์ ์ฌ์ฉํด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ค. ๋ฐ๋ผ์ ์ซ์๋ 64๋นํธ(8๋ฐ์ดํธ)์ ๊ณ ์ ๋ ํฌ๊ธฐ๋ฅผ ์ฐจ์งํ๋ค.
- boolean, null, undefined ๊ฐ๋ค์ ๋งค์ฐ ์์ ํฌ๊ธฐ์ ๊ฐ์ผ๋ก ๋๊ฐ 1๋ฐ์ดํธ๋ ์์์ ๋นํธ๋ง ์ฌ์ฉํ์ฌ ์ ์ฅ๋๋ค.
- ๋ฌธ์์ด(string)์ ๊ฒฝ์ฐ๋ ์กฐ๊ธ ๋ค๋ฅด๋ค. ๋ฌธ์์ด์ ๊ฐ๋ณ ๊ธธ์ด์ด๋ฏ๋ก ์ค์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ค๋ฅธ ์์น์ ์ ์ฅ๋๋ฉฐ ๊ทธ ์์น(๋ฉ๋ชจ๋ฆฌ ์ฃผ์)๋ฅผ ์ฐธ์กฐํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
์ ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- number, boolean: ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋ ๊ฐ๋ค์ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์คํ์ ์ ์ง์ ์ ์ฅ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ซ์๊ฐ 64๋นํธ๋ก ๊ณ ์ ๋์ด ์๊ณ ๋ถ๋ฆฌ์ธ์ ๋งค์ฐ ์์ ๊ณต๊ฐ์ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ํฌ๊ธฐ๋ก ์ ์ฅํ ์ ์๋ค.
- string ๋ฐ ์ฐธ์กฐ ํ์ : ๋ฌธ์์ด์ ๊ณ ์ ๋ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง์ง ์์ผ๋ฏ๋ก ์ฐธ์กฐ ๋ฐฉ์์ผ๋ก ์ ์ฅ๋๋ค. ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์คํ์ ์๋ ๋ฌธ์์ด ๊ฐ์ด ์๋๋ผ ๊ทธ ๋ฌธ์์ด์ด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๊ฐ ์ ์ฅ๋๋ค. ์ด๋ฐ ๋ฐฉ์์ ๋ฌธ์์ด๋ฟ๋ง ์๋๋ผ object, array, function๊ณผ ๊ฐ์ ์ฐธ์กฐ ํ์ ์๋ ๋์ผํ๊ฒ ์ ์ฉ๋๋ค. ๋ฐ๋ผ์ ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(๋ณดํต 32๋นํธ ๋๋ 64๋นํธ ํฌ๊ธฐ)๋ฅผ ์ฌ์ฉํด ์ฐธ์กฐ๋๋ค.
์คํ์ ์ผ๋ก ์ ๊ทผํ ์์น๋ ๊ฒฐ๊ตญ ๋ค ๋์ผํ ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ฆ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์ ํ๋กํผํฐ ์ด๋ฆ๋ง ๋์ผํ๋๋ผ๋ ๋์ผํ ํ๋ ํด๋์ค๋ฅผ ์ด์ฉํด์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
์๋ฅผ ๋ค๋ฉฐ ์กฐ๊ธ ๋ ์ฝ๊ฒ ํ์ด๋ณด์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ํ๋กํผํฐ ์ ์ฅ ํฌ๊ธฐ: ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋ ํ๋กํผํฐ๋ ๊ณ ์ ๋ ํฌ๊ธฐ์ ๊ณต๊ฐ์ ์ฐจ์งํ๋ค. ์์๊ฐ๊ณผ ์ฐธ์กฐ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋, ์์๊ฐ์ ์ง์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๊ณ ์ฐธ์กฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์ ์ฅ๋๋ค. ๋ณดํต ์ด ํฌ๊ธฐ๋ 32๋นํธ(4๋ฐ์ดํธ) ๋๋ 64๋นํธ(8๋ฐ์ดํธ)๋ก ๊ณ ์ ๋๋ค.
- ์ซ์ ๊ฐ: 64๋นํธ ๋ถ๋์์์ ์ผ๋ก ์ ์ฅ๋๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก 8๋ฐ์ดํธ๋ฅผ ์ฐจ์งํ๋ค.
- ์ฐธ์กฐ ๊ฐ: ๊ฐ์ฒด, ๋ฐฐ์ด, ํจ์ ๋ฑ์ ์ฐธ์กฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ๋ฏ๋ก ์ฐธ์กฐ ๊ฐ๋ 64๋นํธ(8๋ฐ์ดํธ)๋ฅผ ์ฐจ์งํ๋ค.
- ์คํ์
๊ณ์ฐ: ๊ฐ ํ๋กํผํฐ๊ฐ ๋์ผํ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ฏ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํ๋ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋กํผํฐ๋ค์ ์๋์ ์คํ์
์ ๊ฒฐ์ ํ๋ค. ๋ง์ฝ ์ฒซ ๋ฒ์งธ ํ๋กํผํฐ์ ์คํ์
์ด 0์ด๋ผ๋ฉด ๋ ๋ฒ์งธ ํ๋กํผํฐ์ ์คํ์
์ ์ฒซ ๋ฒ์งธ ํ๋กํผํฐ๊ฐ ์ฐจ์งํ 8๋ฐ์ดํธ ๋ค์์ ์์นํ๊ฒ ๋๋ค.
- x์ ์คํ์ : 0 (์ฒซ ๋ฒ์งธ ํ๋กํผํฐ)
- y์ ์คํ์ : 8 (๋ ๋ฒ์งธ ํ๋กํผํฐ, ์ฒซ ๋ฒ์งธ ํ๋กํผํฐ์ 8๋ฐ์ดํธ ๋ค)
- z์ ์คํ์ : 16 (์ธ ๋ฒ์งธ ํ๋กํผํฐ, ๋ ๋ฒ์งธ ํ๋กํผํฐ์ 8๋ฐ์ดํธ ๋ค)
- ๊ฐ์ ํ์
์ ๋ฐ๋ฅธ ์ฐจ์ด: ํ๋กํผํฐ์ ๊ฐ์ด ์์๊ฐ์ด๋ ๊ฐ์ฒด ์ฐธ์กฐ์ด๋ ์คํ์
์ ๋์ผํ ๋ฐฉ์์ผ๋ก ๊ณ์ฐ๋๋ค.
- ์ซ์๊ฐ, ๋ถ๋ฆฌ์ธ ๋ฑ ์์๊ฐ: ๊ทธ ๊ฐ ์์ฒด๊ฐ 8๋ฐ์ดํธ ๊ณต๊ฐ์ ์ ์ฅ๋๋ค.
- ๊ฐ์ฒด, ๋ฌธ์์ด ์ฐธ์กฐ ๊ฐ: ๋ฉ๋ชจ๋ฆฌ์์ ๋ค๋ฅธ ๊ณณ์ ์๋ ๊ฐ์ฒด, ๋ฌธ์์ด์ ์ฃผ์(์ฐธ์กฐ)๊ฐ 8๋ฐ์ดํธ ๊ณต๊ฐ์ ์ ์ฅ๋๋ค.
โ ์ธ๋ผ์ธ ์บ์(Inline Cache)
์ธ๋ผ์ธ ์บ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ์ฌ์ฉํ๋ ๊ธฐ์ ์ด๋ค. ์ฝ๋ ์คํ ์ค์ ํ์ ์ด ๊ณ์ ๋ฐ๋๋ ์ํฉ์์ ๊ฐ์ฒด์ ํ๋กํผํฐ์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋๋ก ๋์์ค๋ค. ํ๋ ํด๋์ค์ ํจ๊ป ์๋ํ๋ฉฐ ์ธ๋ผ์ธ ์บ์๋ ํ๋กํผํฐ ์ ๊ทผ์ ๋ํ ์ ๋ณด๋ฅผ ๊ธฐ์ตํด ๋๊ณ ๋ฐ๋ณต์ ์ธ ์ ๊ทผ ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๊ฒ ํ๋ค.
์ธ๋ผ์ธ ์บ์๋ ๊ฐ์ฒด์ ํ๋กํผํฐ์ ์ ๊ทผํ ๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ์บ์ํด๋๊ณ ์ดํ ๊ฐ์ ํ๋กํผํฐ์ ๋ค์ ์ ๊ทผํ ๋ ์บ์๋ ๊ฒฝ๋ก๋ฅผ ์ด์ฉํด ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
์ธ๋ผ์ธ ์บ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
- ์ฒ์ ํ๋กํผํฐ์ ์ ๊ทผํ ๋: ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ฐ์ฒด์ ํ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ํ๋กํผํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ด๋์ ์๋์ง ํ์ธํ๋ค. ์ด๋ ๊ฒฝ๋ก(ํ๋กํผํฐ์ ์คํ์ ์์น)์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์ธ๋ผ์ธ ์บ์์ ์ ์ฅํ๋ค.
- ๋ค์์ ๊ฐ์ ํ๋กํผํฐ์ ์ ๊ทผํ ๋: ๋ง์ฝ ๊ฐ์ฒด๊ฐ ๊ฐ์ ํ๋ ํด๋์ค๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ค๋ฉด, ์ธ๋ผ์ธ ์บ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏธ๋ฆฌ ์ ์ฅ๋ ๊ฒฝ๋ก๋ฅผ ์ด์ฉํด ๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ๋ค์ ํ์ธํ์ง ์๊ณ , ๋ฐ๋ก ํด๋น ํ๋กํผํฐ์ ์ ๊ทผํ ์ ์๋ค.
์บ์ ๋ฏธ์ค(Cache Miss)
๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ํ๋ ํด๋์ค๋ฅผ ๊ฐ์ง๊ฑฐ๋, ์์๊ณผ ๋ค๋ฅธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ, ์ธ๋ผ์ธ ์บ์๋ ํด๋น ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ค์ ํ๋ ํด๋์ค๋ฅผ ํ์ธํ์ฌ ์๋ก์ด ๊ฒฝ๋ก๋ฅผ ์ฐพ๋๋ค.
์ธ๋ผ์ธ ์บ์์ ์ข ๋ฅ
์ธ๋ผ์ธ ์บ์์๋ ํฌ๊ฒ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํ๋ค.
- ๋ชจ๋ ธ๋ชจํฝ ์บ์(Monomorphic Inline Cache): ํน์ ํจ์์์ ๋์ผํ ํ์ ์ด๋ ํ๋ ํด๋์ค๋ฅผ ๊ฐ์ง ๊ฐ์ฒด์ ๋ํด ํ๋์ ์บ์๋ฅผ ์ฌ์ฉํ๋ค. ์ฆ, ๊ฐ์ ํจ์๊ฐ ํญ์ ๋์ผํ ํ๋ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ฒ๋ฆฌํ ๋ ์ ์ฉํ๋ค.
- ํด๋ฆฌ๋ชจํฝ ์บ์(Polymorphic Inline Cache): ๋์ผํ ํจ์์์ ์ฌ๋ฌ ์ข ๋ฅ์ ํ๋ ํด๋์ค๋ ํ์ ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋๋ค. ์ฌ๋ฌ ํ๋ ํด๋์ค์ ๋ํ ์บ์ ์ ๋ณด๋ฅผ ์ ์ฅํ์ฌ ํจ์๊ฐ ๋ค์ํ ํ์ ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ์ต์ ํํ๋ค.
์ธ๋ผ์ธ ์บ์์ ํ๋ ํด๋์ค๋ ๋ฐ์ ํ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ ์๋ค. ํ๋ ํด๋์ค๋ ๊ฐ์ฒด์ ๊ตฌ์กฐ(ํ๋กํผํฐ์ ๊ทธ ์์)๋ฅผ ์ ์ํ๋ ์ญํ ์ ํ๊ณ ์ธ๋ผ์ธ ์บ์๋ ๋ ๋์ด๊ฐ ์ด ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋กํผํฐ ์ ๊ทผ ๊ฒฝ๋ก๋ฅผ ์ต์ ํํ๋ ์ญํ ์ ํ๋ค.
- ํ๋ ํด๋์ค๊ฐ ๋์ผํ ๊ฒฝ์ฐ: ์ธ๋ผ์ธ ์บ์๋ ๊ฐ์ ํ๋ ํด๋์ค๋ฅผ ๊ณต์ ํ๋ ๊ฐ์ฒด์ ํ๋กํผํฐ ์ ๊ทผ ๊ฒฝ๋ก๋ฅผ ์บ์์ ์ ์ฅํ๊ณ ์ดํ ๊ฐ์ ํ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฒด์์ ํ๋กํผํฐ์ ์ ๊ทผํ ๋ ์ด๋ฅผ ์ฌ์ฌ์ฉํ๋ค.
- ํ๋ ํด๋์ค๊ฐ ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ: ๋ง์ฝ ๊ฐ์ฒด์ ๊ตฌ์กฐ๊ฐ ๋ณํ๋ฉด(ํ๋กํผํฐ ์ถ๊ฐ, ์ญ์ ๋ฑ) ์๋ก์ด ํ๋ ํด๋์ค๊ฐ ๋ง๋ค์ด์ง๊ฒ ๋๋ค. ์ด ๊ฒฝ์ฐ ์ธ๋ผ์ธ ์บ์๊ฐ ์ ํจํ์ง ์๊ฒ ๋๋ฏ๋ก ์์ง์ ์๋ก์ด ํ๋ ํด๋์ค์ ๋ํ ๊ฒฝ๋ก๋ฅผ ๋ค์ ๊ณ์ฐํ๊ฒ ๋๋ค.
๐ ์ฐธ๊ณ
V8์ ํ๋ ํด๋์ค ์ด์ผ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋์ด ๊ทธ ๊ธฐ๋ถ์ ํค์๋ฆด ์ ์๋ค๋ฉด ์๋ ํ์ธ์? LINE Fukuoka์ ํ๋ก ํธ์๋ ์์ง๋์ด Yonehara์ ๋๋ค. ์ ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก์ ์์ง ์น ๋ธ๋ผ์ฐ์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ถ์ ํค์๋ ค
engineering.linecorp.com
[JavaScript] ํ๋ ํด๋์ค, ์ธ๋ผ์ธ ์บ์ฑ ๊ทธ๋ฆฌ๊ณ ์ต์ ํ
์ธ๋ผ์ธ ์บ์ฑ (inline caching) ์ธ๋ผ์ธ ์บ์ฑ์ด๋ ์ปดํ์ผํ๋ ๊ณผ์ ์์ ์ํ๋๋ ๊ธฐ๋ฅ์ด๋ค. ์ผ๋จ ์ด๋ฆ๋ง ๋ณด๊ณ ์ด๊ฒ ๋ฌด์์ธ์ง ์ถ์ธกํด๋ณด์ ๋จผ์ C๋ C++ ์ธ์ด์์ ์ธ๋ผ์ธ ํจ์๋ผ๋ ๋ฌธ๋ฒ์ด ์๋ค. ์ด๋ ํจ์
velog.io
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript] ํ๋กํ ํ์ (Prototype) (1) | 2023.04.15 |
---|---|
[JavaScript] ์คํ์ปจํ ์คํธ (0) | 2023.02.21 |