V8μ μΈλΌμΈ μΊμ±, λ€νμ±, κ·Έλ¦¬κ³ JavaScriptμ μμ± μ κ·Ό μ΅μ ν κΈ°μ μ λν μ¬μΈ΅ λΆμ. μ±λ₯μ΄ λ°μ΄λ JavaScript μ½λλ₯Ό μμ±νλ λ°©λ²μ μμ보μΈμ.
JavaScript V8 μΈλΌμΈ μΊμ λ€νμ±: μμ± μ κ·Ό μ΅μ ν λΆμ
JavaScriptλ λ§€μ° μ μ°νκ³ λμ μΈ μΈμ΄μ΄μ§λ§, μΈν°νλ¦¬ν° λ°©μμ νΉμ± λλ¬Έμ μ’ μ’ μ±λ₯ λ¬Έμ μ μ§λ©΄ν©λλ€. νμ§λ§ Googleμ V8(Chrome λ° Node.jsμμ μ¬μ©)κ³Ό κ°μ μ΅μ JavaScript μμ§μ λμ μ μ°μ±κ³Ό μ€ν μλ μ¬μ΄μ 격차λ₯Ό ν΄μνκΈ° μν΄ μ κ΅ν μ΅μ ν κΈ°μ μ μ¬μ©ν©λλ€. μ΄λ¬ν κΈ°μ μ€ κ°μ₯ μ€μν κ² μ€ νλλ μμ± μ κ·Όμ ν¬κ² κ°μννλ μΈλΌμΈ μΊμ±μ λλ€. μ΄ λΈλ‘κ·Έ κ²μλ¬Όμμλ V8μ μΈλΌμΈ μΊμ λ©μ»€λμ¦μ λν ν¬κ΄μ μΈ λΆμμ μ 곡νλ©°, νΉν λ€νμ±μ μ²λ¦¬νκ³ μμ± μ κ·Όμ μ΅μ ννμ¬ JavaScript μ±λ₯μ ν₯μμν€λ λ°©λ²μ μ€μ μ λ‘λλ€.
κΈ°λ³Έ μ΄ν΄: JavaScriptμμμ μμ± μ κ·Ό
JavaScriptμμ κ°μ²΄μ μμ±μ μ κ·Όνλ κ²μ κ°λ¨ν΄ 보μ
λλ€. μ νκΈ°λ²(object.property)μ΄λ λκ΄νΈ νκΈ°λ²(object['property'])μ μ¬μ©ν μ μμ΅λλ€. κ·Έλ¬λ λ΄λΆμ μΌλ‘ μμ§μ μμ±κ³Ό μ°κ΄λ κ°μ μ°Ύμ κ²μνκΈ° μν΄ μ¬λ¬ μμ
μ μνν΄μΌ ν©λλ€. μ΄λ¬ν μμ
μ νΉν JavaScriptμ λμ μΈ νΉμ±μ κ³ λ €ν λ νμ κ°λ¨νμ§λ μμ΅λλ€.
λ€μ μμλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
const obj = { x: 10, y: 20 };
console.log(obj.x); // 'x' μμ±μ μ κ·Ό
μμ§μ λ¨Όμ λ€μμ μνν΄μΌ ν©λλ€:
objκ° μ ν¨ν κ°μ²΄μΈμ§ νμΈν©λλ€.- κ°μ²΄ ꡬ쑰 λ΄μμ
xμμ±μ μ°Ύμ΅λλ€. xμ μ°κ΄λ κ°μ κ°μ Έμ΅λλ€.
μ΅μ νκ° μλ€λ©΄ κ° μμ± μ κ·Όμ μ 체 μ‘°νλ₯Ό ν¬ν¨νκ² λμ΄ μ€νμ΄ λλ €μ§λλ€. λ°λ‘ μ΄ μ§μ μμ μΈλΌμΈ μΊμ±μ΄ μ¬μ©λ©λλ€.
μΈλΌμΈ μΊμ±: μ±λ₯ λΆμ€ν°
μΈλΌμΈ μΊμ±μ μ΄μ μ‘°νμ κ²°κ³Όλ₯Ό μΊμ±νμ¬ μμ± μ κ·Ό μλλ₯Ό λμ΄λ μ΅μ ν κΈ°μ μ λλ€. ν΅μ¬ μμ΄λμ΄λ λμΌν μ νμ κ°μ²΄μμ λμΌν μμ±μ μ¬λ¬ λ² μ κ·Όν κ²½μ°, μμ§μ΄ μ΄μ μ‘°νμ μ 보λ₯Ό μ¬μ¬μ©νμ¬ μ€λ³΅ κ²μμ νΌν μ μλ€λ κ²μ λλ€.
μλ λ°©μμ λ€μκ³Ό κ°μ΅λλ€:
- 첫 μ κ·Ό: μμ±μ μ²μ μ κ·Όν λ, μμ§μ μ 체 μ‘°ν νλ‘μΈμ€λ₯Ό μννμ¬ κ°μ²΄ λ΄μμ μμ±μ μμΉλ₯Ό μλ³ν©λλ€.
- μΊμ±: μμ§μ μμ±μ μμΉ μ 보(μ: λ©λͺ¨λ¦¬ λ΄ μ€νμ )μ κ°μ²΄μ νλ ν΄λμ€(λμ€μ μμΈν μ€λͺ )λ₯Ό μ κ·Όμ μνν νΉμ μ½λ λΌμΈκ³Ό μ°κ΄λ μμ μΈλΌμΈ μΊμμ μ μ₯ν©λλ€.
- νμ μ κ·Ό: λμΌν μ½λ μμΉμμ λμΌν μμ±μ νμ μ κ·Όν λ, μμ§μ λ¨Όμ μΈλΌμΈ μΊμλ₯Ό νμΈν©λλ€. μΊμμ κ°μ²΄μ νμ¬ νλ ν΄λμ€μ λν μ ν¨ν μ λ³΄κ° ν¬ν¨λμ΄ μμΌλ©΄, μμ§μ μ 체 μ‘°νλ₯Ό μννμ§ μκ³ μ§μ μμ± κ°μ κ°μ Έμ¬ μ μμ΅λλ€.
μ΄ μΊμ± λ©μ»€λμ¦μ νΉν 루νλ ν¨μμ κ°μ΄ μμ£Ό μ€νλλ μ½λ μΉμ μμ μμ± μ κ·Όμ μ€λ²ν€λλ₯Ό ν¬κ² μ€μΌ μ μμ΅λλ€.
νλ ν΄λμ€: ν¨μ¨μ μΈ μΊμ±μ ν΅μ¬
μΈλΌμΈ μΊμ±μ μ΄ν΄νλ λ° μ€μν κ°λ μ νλ ν΄λμ€(λ§΅ λλ μ °μ΄νλΌκ³ λ ν¨)μ λλ€. νλ ν΄λμ€λ V8μ΄ JavaScript κ°μ²΄μ ꡬ쑰λ₯Ό λνλ΄κΈ° μν΄ μ¬μ©νλ λ΄λΆ λ°μ΄ν° ꡬ쑰μ λλ€. μ΄λ κ°μ²΄κ° κ°μ§ μμ±κ³Ό λ©λͺ¨λ¦¬ λ΄ λ μ΄μμμ μ€λͺ ν©λλ€.
V8μ κ° κ°μ²΄μ μ§μ νμ μ 보λ₯Ό μ°κ΄μν€λ λμ , λμΌν ꡬ쑰λ₯Ό κ°μ§ κ°μ²΄λ€μ λμΌν νλ ν΄λμ€λ‘ κ·Έλ£Ήνν©λλ€. μ΄λ₯Ό ν΅ν΄ μμ§μ κ°μ²΄κ° μ΄μ μ λ³Έ κ°μ²΄μ λμΌν ꡬ쑰λ₯Ό κ°μ‘λμ§ ν¨μ¨μ μΌλ‘ νμΈν μ μμ΅λλ€.
μλ‘μ΄ κ°μ²΄κ° μμ±λλ©΄ V8μ κ·Έ μμ±μ λ°λΌ νλ ν΄λμ€λ₯Ό ν λΉν©λλ€. λ κ°μ²΄κ° λμΌν μμλ‘ λμΌν μμ±μ κ°μ§λ©΄ λμΌν νλ ν΄λμ€λ₯Ό 곡μ νκ² λ©λλ€.
λ€μ μμλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
const obj1 = { x: 10, y: 20 };
const obj2 = { x: 5, y: 15 };
const obj3 = { y: 30, x: 40 }; // μμ± μμκ° λ€λ¦
// obj1κ³Ό obj2λ λμΌν νλ ν΄λμ€λ₯Ό 곡μ ν κ°λ₯μ±μ΄ λμ
// obj3λ λ€λ₯Έ νλ ν΄λμ€λ₯Ό κ°μ§
κ°μ²΄μ μμ±μ΄ μΆκ°λλ μμλ κ°μ²΄μ νλ ν΄λμ€λ₯Ό κ²°μ νκΈ° λλ¬Έμ μ€μν©λλ€. λμΌν μμ±μ κ°μ‘μ§λ§ λ€λ₯Έ μμλ‘ μ μλ κ°μ²΄λ€μ λ€λ₯Έ νλ ν΄λμ€λ₯Ό ν λΉλ°κ² λ©λλ€. μ΄λ μΈλΌμΈ μΊμκ° μΊμλ μμ± μμΉκ° μ¬μ ν μ ν¨νμ§ νλ¨νκΈ° μν΄ νλ ν΄λμ€μ μμ‘΄νκΈ° λλ¬Έμ μ±λ₯μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
λ€νμ±κ³Ό μΈλΌμΈ μΊμ λμ
λ€νμ±, μ¦ ν¨μλ λ©μλκ° λ€λ₯Έ νμ μ κ°μ²΄μ λν΄ μλν μ μλ λ₯λ ₯μ μΈλΌμΈ μΊμ±μ μ΄λ €μμ μ€λλ€. JavaScriptμ λμ μΈ νΉμ±μ λ€νμ±μ μ₯λ €νμ§λ§, μ΄λ λ€λ₯Έ μ½λ κ²½λ‘μ κ°μ²΄ κ΅¬μ‘°λ‘ μ΄μ΄μ Έ μΈλΌμΈ μΊμλ₯Ό 무ν¨νμν¬ μ μμ΅λλ€.
νΉμ μμ± μ κ·Ό μμΉμμ λ§μ£ΌμΉλ νλ ν΄λμ€μ μμ λ°λΌ μΈλΌμΈ μΊμλ λ€μκ³Ό κ°μ΄ λΆλ₯λ μ μμ΅λλ€:
- λͺ¨λ Έλͺ¨ν½(Monomorphic): μμ± μ κ·Ό μμΉκ° λ¨μΌ νλ ν΄λμ€μ κ°μ²΄λ§ λ§μ£ΌμΉ κ²½μ°μ λλ€. μ΄λ μμ§μ΄ μΊμλ μμ± μμΉλ₯Ό νμ μ κ°κ³ μ¬μ¬μ©ν μ μμΌλ―λ‘ μΈλΌμΈ μΊμ±μ μ΄μμ μΈ μλ리μ€μ λλ€.
- ν΄λ¦¬λͺ¨ν½(Polymorphic): μμ± μ κ·Ό μμΉκ° μ¬λ¬ κ°(λ³΄ν΅ μμ)μ νλ ν΄λμ€λ₯Ό κ°μ§ κ°μ²΄λ€μ λ§μ£ΌμΉ κ²½μ°μ λλ€. μμ§μ μ¬λ¬ μ μ¬μ μμ± μμΉλ₯Ό μ²λ¦¬ν΄μΌ ν©λλ€. V8μ ν΄λ¦¬λͺ¨ν½ μΈλΌμΈ μΊμλ₯Ό μ§μνλ©°, νλ ν΄λμ€/μμ± μμΉ μμ μμ ν μ΄λΈμ μ μ₯ν©λλ€.
- λ©κ°λͺ¨ν½(Megamorphic): μμ± μ κ·Ό μμΉκ° λ§€μ° λ§μ μμ λ€λ₯Έ νλ ν΄λμ€λ₯Ό κ°μ§ κ°μ²΄λ€μ λ§μ£ΌμΉ κ²½μ°μ λλ€. μ΄ μλ리μ€μμλ μμ§μ΄ κ°λ₯ν λͺ¨λ νλ ν΄λμ€/μμ± μμΉ μμ ν¨μ¨μ μΌλ‘ μ μ₯ν μ μμΌλ―λ‘ μΈλΌμΈ μΊμ±μ΄ λΉν¨μ¨μ μ΄ λ©λλ€. λ©κ°λͺ¨ν½μ κ²½μ°, V8μ μΌλ°μ μΌλ‘ λ λλ¦¬κ³ μΌλ°μ μΈ μμ± μ κ·Ό λ©μ»€λμ¦μΌλ‘ λ체ν©λλ€.
μμλ₯Ό ν΅ν΄ μ€λͺ ν΄ λ³΄κ² μ΅λλ€:
function getX(obj) {
return obj.x;
}
const obj1 = { x: 10, y: 20 };
const obj2 = { x: 5, z: 15 };
const obj3 = { x: 7, a: 8, b: 9 };
console.log(getX(obj1)); // 첫 νΈμΆ: λͺ¨λ
Έλͺ¨ν½
console.log(getX(obj2)); // λ λ²μ§Έ νΈμΆ: ν΄λ¦¬λͺ¨ν½ (λ κ°μ νλ ν΄λμ€)
console.log(getX(obj3)); // μΈ λ²μ§Έ νΈμΆ: μ μ¬μ μΌλ‘ λ©κ°λͺ¨ν½ (λͺ κ° μ΄μμ νλ ν΄λμ€)
μ΄ μμμμ getX ν¨μλ μ²μμλ λμΌν νλ ν΄λμ€(μ΄κΈ°μλ obj1κ³Ό κ°μ κ°μ²΄)λ₯Ό κ°μ§ κ°μ²΄μ λν΄μλ§ μλνκΈ° λλ¬Έμ λͺ¨λ
Έλͺ¨ν½μ
λλ€. νμ§λ§ obj2μ ν¨κ» νΈμΆλλ©΄ μΈλΌμΈ μΊμλ ν΄λ¦¬λͺ¨ν½μ΄ λ©λλ€. μλνλ©΄ μ΄μ λ κ°μ λ€λ₯Έ νλ ν΄λμ€(obj1κ³Ό obj2 κ°μ κ°μ²΄λ€)λ₯Ό κ°μ§ κ°μ²΄λ₯Ό μ²λ¦¬ν΄μΌ νκΈ° λλ¬Έμ
λλ€. obj3μ ν¨κ» νΈμΆλ λ, μμ§μ λ무 λ§μ νλ ν΄λμ€λ₯Ό λ§μ£Όμ³ μΈλΌμΈ μΊμλ₯Ό 무ν¨νν΄μΌ ν μ μμΌλ©°, μμ± μ κ·Όμ λ μ΅μ νλ©λλ€.
λ€νμ±μ΄ μ±λ₯μ λ―ΈμΉλ μν₯
λ€νμ±μ μ λλ μμ± μ κ·Ό μ±λ₯μ μ§μ μ μΈ μν₯μ λ―ΈμΉ©λλ€. λͺ¨λ Έλͺ¨ν½ μ½λκ° μΌλ°μ μΌλ‘ κ°μ₯ λΉ λ₯΄λ©°, λ©κ°λͺ¨ν½ μ½λκ° κ°μ₯ λ립λλ€.
- λͺ¨λ Έλͺ¨ν½: μ§μ μ μΈ μΊμ ννΈλ‘ μΈν΄ κ°μ₯ λΉ λ₯Έ μμ± μ κ·Ό.
- ν΄λ¦¬λͺ¨ν½: λͺ¨λ Έλͺ¨ν½λ³΄λ€ λ리μ§λ§, νΉν μμμ λ€λ₯Έ κ°μ²΄ νμ μ λν΄μλ μ¬μ ν ν©λ¦¬μ μΌλ‘ ν¨μ¨μ μ λλ€. μΈλΌμΈ μΊμλ μ νλ μμ νλ ν΄λμ€/μμ± μμΉ μμ μ μ₯ν μ μμ΅λλ€.
- λ©κ°λͺ¨ν½: μΊμ λ―Έμ€μ λ 볡μ‘ν μμ± μ‘°ν μ λ΅μ΄ νμνκΈ° λλ¬Έμ ν¨μ¬ λ립λλ€.
λ€νμ±μ μ΅μννλ κ²μ JavaScript μ½λμ μ±λ₯μ μλΉν μν₯μ λ―ΈμΉ μ μμ΅λλ€. λͺ¨λ Έλͺ¨ν½ λλ μ΅μ μ κ²½μ° ν΄λ¦¬λͺ¨ν½ μ½λλ₯Ό λͺ©νλ‘ νλ κ²μ΄ ν΅μ¬ μ΅μ ν μ λ΅μ λλ€.
μ€μ©μ μΈ μμ λ° μ΅μ ν μ λ΅
μ΄μ V8μ μΈλΌμΈ μΊμ±μ νμ©νκ³ λ€νμ±μ λΆμ μ μΈ μν₯μ μ΅μννλ JavaScript μ½λ μμ±μ μν λͺ κ°μ§ μ€μ©μ μΈ μμ μ μ λ΅μ μ΄ν΄λ³΄κ² μ΅λλ€.
1. μΌκ΄λ κ°μ²΄ νν
λμΌν ν¨μμ μ λ¬λλ κ°μ²΄λ€μ΄ μΌκ΄λ ꡬ쑰λ₯Ό κ°λλ‘ νμμμ€. μμ±μ λμ μΌλ‘ μΆκ°ν기보λ€λ 미리 λͺ¨λ μμ±μ μ μνμμμ€.
λμ μ (λμ μμ± μΆκ°):
function Point(x, y) {
this.x = x;
this.y = y;
}
const p1 = new Point(10, 20);
const p2 = new Point(5, 15);
if (Math.random() > 0.5) {
p1.z = 30; // λμ μΌλ‘ μμ± μΆκ°
}
function printPointX(point) {
console.log(point.x);
}
printPointX(p1);
printPointX(p2);
μ΄ μμμμ p1μ z μμ±μ κ°μ§ μ μμ§λ§ p2λ κ·Έλ μ§ μμ λ€λ₯Έ νλ ν΄λμ€λ₯Ό κ°μ§κ² λλ©° printPointXμ μ±λ₯μ΄ μ νλ©λλ€.
μ’μ μ (μΌκ΄λ μμ± μ μ):
function Point(x, y, z) {
this.x = x;
this.y = y;
this.z = z === undefined ? undefined : z; // 'z'κ° undefinedμΌμ§λΌλ νμ μ μ
}
const p1 = new Point(10, 20, 30);
const p2 = new Point(5, 15);
function printPointX(point) {
console.log(point.x);
}
printPointX(p1);
printPointX(p2);
z μμ±μ undefinedμΌμ§λΌλ νμ μ μν¨μΌλ‘μ¨ λͺ¨λ Point κ°μ²΄κ° λμΌν νλ ν΄λμ€λ₯Ό κ°λλ‘ λ³΄μ₯ν©λλ€.
2. μμ± μμ νΌνκΈ°
κ°μ²΄μμ μμ±μ μμ νλ©΄ νλ ν΄λμ€κ° λ³κ²½λκ³ μΈλΌμΈ μΊμκ° λ¬΄ν¨νλ μ μμ΅λλ€. κ°λ₯νλ€λ©΄ μμ± μμ λ₯Ό νΌνμμμ€.
λμ μ (μμ± μμ ):
const obj = { a: 1, b: 2, c: 3 };
delete obj.b;
function accessA(object) {
return object.a;
}
accessA(obj);
obj.bλ₯Ό μμ νλ©΄ objμ νλ ν΄λμ€κ° λ³κ²½λμ΄ accessAμ μ±λ₯μ μ μ¬μ μΌλ‘ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
μ’μ μ (undefinedλ‘ μ€μ ):
const obj = { a: 1, b: 2, c: 3 };
obj.b = undefined; // μμ λμ undefinedλ‘ μ€μ
function accessA(object) {
return object.a;
}
accessA(obj);
μμ±μ undefinedλ‘ μ€μ νλ©΄ κ°μ²΄μ νλ ν΄λμ€κ° 보쑴λκ³ μΈλΌμΈ μΊμκ° λ¬΄ν¨νλλ κ²μ λ°©μ§ν μ μμ΅λλ€.
3. ν©ν 리 ν¨μ μ¬μ©
ν©ν 리 ν¨μλ μΌκ΄λ κ°μ²΄ ννλ₯Ό κ°μ νκ³ λ€νμ±μ μ€μ΄λ λ° λμμ΄ λ μ μμ΅λλ€.
λμ μ (μΌκ΄μ± μλ κ°μ²΄ μμ±):
function createObject(type, data) {
if (type === 'A') {
return { x: data.x, y: data.y };
} else if (type === 'B') {
return { a: data.a, b: data.b };
}
}
const objA = createObject('A', { x: 10, y: 20 });
const objB = createObject('B', { a: 5, b: 15 });
function processX(obj) {
return obj.x;
}
processX(objA);
processX(objB); // 'objB'λ 'x'κ° μμ΄ λ¬Έμ λ° λ€νμ± μ λ°
μ΄λ λ§€μ° λ€λ₯Έ ννμ κ°μ²΄λ€μ΄ λμΌν ν¨μμ μν΄ μ²λ¦¬λκ² νμ¬ λ€νμ±μ μ¦κ°μν΅λλ€.
μ’μ μ (μΌκ΄λ ννλ₯Ό κ°μ§ ν©ν 리 ν¨μ):
function createObjectA(data) {
return { x: data.x, y: data.y, a: undefined, b: undefined }; // μΌκ΄λ μμ± κ°μ
}
function createObjectB(data) {
return { x: undefined, y: undefined, a: data.a, b: data.b }; // μΌκ΄λ μμ± κ°μ
}
const objA = createObjectA({ x: 10, y: 20 });
const objB = createObjectB({ a: 5, b: 15 });
function processX(obj) {
return obj.x;
}
// μ΄κ²μ΄ processXμ μ§μ μ μΌλ‘ λμμ΄ λμ§λ μμ§λ§, νμ
νΌλμ νΌνκΈ° μν μ’μ κ΄νμ 보μ¬μ€λλ€.
// μ€μ μλ리μ€μμλ Aμ Bμ λν΄ λ ꡬ체μ μΈ ν¨μλ₯Ό μν κ²μ
λλ€.
// μμ€μμ λ€νμ±μ μ€μ΄κΈ° μν ν©ν 리 ν¨μ μ¬μ©μ 보μ¬μ£ΌκΈ° μν΄ μ΄ κ΅¬μ‘°λ μ μ΅ν©λλ€.
μ΄ μ κ·Ό λ°©μμ λ λ§μ ꡬ쑰λ₯Ό μꡬνμ§λ§, κ° νΉμ νμ μ λν΄ μΌκ΄λ κ°μ²΄ μμ±μ μ₯λ €νμ¬ ν΄λΉ κ°μ²΄ νμ λ€μ΄ κ³΅ν΅ μ²λ¦¬ μλ리μ€μ ν¬ν¨λ λ λ€νμ±μ μνμ μ€μ λλ€.
4. λ°°μ΄μμ νΌν©λ νμ νΌνκΈ°
λ€λ₯Έ νμ μ μμλ₯Ό ν¬ν¨νλ λ°°μ΄μ νμ νΌλκ³Ό μ±λ₯ μ νλ₯Ό μ λ°ν μ μμ΅λλ€. λμΌν νμ μ μμλ₯Ό λ΄λ λ°°μ΄μ μ¬μ©νλλ‘ λ Έλ ₯νμμμ€.
λμ μ (λ°°μ΄μ νΌν©λ νμ ):
const arr = [1, 'hello', { x: 10 }];
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
μμ§μ΄ λ°°μ΄ λ΄ λ€λ₯Έ νμ μ μμλ€μ μ²λ¦¬ν΄μΌ νλ―λ‘ μ±λ₯ λ¬Έμ λ₯Ό μ λ°ν μ μμ΅λλ€.
μ’μ μ (λ°°μ΄μ μΌκ΄λ νμ ):
const arr = [1, 2, 3]; // μ«μ λ°°μ΄
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
μΌκ΄λ μμ νμ μ κ°μ§ λ°°μ΄μ μ¬μ©νλ©΄ μμ§μ΄ λ°°μ΄ μ κ·Όμ λ ν¨κ³Όμ μΌλ‘ μ΅μ νν μ μμ΅λλ€.
5. νμ ννΈ μ¬μ© (μ£Όμν΄μ)
μΌλΆ JavaScript μ»΄νμΌλ¬μ λꡬλ μ½λμ νμ ννΈλ₯Ό μΆκ°ν μ μκ² ν΄μ€λλ€. JavaScript μ체λ λμ νμ μΈμ΄μ΄μ§λ§, μ΄λ¬ν ννΈλ μμ§μ΄ μ½λλ₯Ό μ΅μ ννλ λ° λ λ§μ μ 보λ₯Ό μ 곡ν μ μμ΅λλ€. κ·Έλ¬λ νμ ννΈμ κ³Όλν μ¬μ©μ μ½λλ₯Ό λ μ μ°νκ² λ§λ€κ³ μ μ§λ³΄μλ₯Ό μ΄λ ΅κ² ν μ μμΌλ―λ‘ μ μ€νκ² μ¬μ©ν΄μΌ ν©λλ€.
μμ (TypeScript νμ ννΈ μ¬μ©):
function add(a: number, b: number): number {
return a + b;
}
console.log(add(5, 10));
TypeScriptλ νμ κ²μ¬λ₯Ό μ 곡νλ©° μ μ¬μ μΈ νμ κ΄λ ¨ μ±λ₯ λ¬Έμ λ₯Ό μλ³νλ λ° λμμ΄ λ μ μμ΅λλ€. μ»΄νμΌλ JavaScriptμλ νμ ννΈκ° μμ§λ§, TypeScriptλ₯Ό μ¬μ©νλ©΄ μ»΄νμΌλ¬κ° JavaScript μ½λλ₯Ό μ΅μ ννλ λ°©λ²μ λ μ μ΄ν΄ν μ μμ΅λλ€.
κ³ κΈ V8 κ°λ λ° κ³ λ € μ¬ν
λ κΉμ μ΅μ νλ₯Ό μν΄μλ V8μ λ€λ₯Έ μ»΄νμΌ ν°μ΄ κ°μ μνΈ μμ©μ μ΄ν΄νλ κ²μ΄ μ μ©ν μ μμ΅λλ€.
- Ignition: V8μ μΈν°ν리ν°λ‘, μ²μμ JavaScript μ½λλ₯Ό μ€ννλ μν μ ν©λλ€. μ΅μ νλ₯Ό μλ΄νλ λ° μ¬μ©λλ νλ‘νμΌλ§ λ°μ΄ν°λ₯Ό μμ§ν©λλ€.
- TurboFan: V8μ μ΅μ ν μ»΄νμΌλ¬μ λλ€. Ignitionμμ μμ§ν νλ‘νμΌλ§ λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ TurboFanμ μμ£Ό μ€νλλ μ½λλ₯Ό κ³ λλ‘ μ΅μ νλ κΈ°κ³ μ½λλ‘ μ»΄νμΌν©λλ€. TurboFanμ ν¨κ³Όμ μΈ μ΅μ νλ₯Ό μν΄ μΈλΌμΈ μΊμ±κ³Ό νλ ν΄λμ€μ ν¬κ² μμ‘΄ν©λλ€.
μ²μ Ignitionμ μν΄ μ€νλ μ½λλ λμ€μ TurboFanμ μν΄ μ΅μ νλ μ μμ΅λλ€. λ°λΌμ μΈλΌμΈ μΊμ±κ³Ό νλ ν΄λμ€μ μΉνμ μΈ μ½λλ₯Ό μμ±νλ κ²μ κΆκ·Ήμ μΌλ‘ TurboFanμ μ΅μ ν λ₯λ ₯μΌλ‘λΆν° μ΄μ μ μ»κ² λ κ²μ λλ€.
μ€μ μΈκ³μμμ μν₯: κΈλ‘λ² μ ν리μΌμ΄μ
μμμ λ Όμλ μμΉλ€μ κ°λ°μμ μ§λ¦¬μ μμΉμ μκ΄μμ΄ κ΄λ ¨μ΄ μμ΅λλ€. κ·Έλ¬λ μ΄λ¬ν μ΅μ νμ μν₯μ λ€μκ³Ό κ°μ μλ리μ€μμ νΉν μ€μν μ μμ΅λλ€:
- λͺ¨λ°μΌ κΈ°κΈ°: μ²λ¦¬ λ₯λ ₯κ³Ό λ°°ν°λ¦¬ μλͺ μ΄ μ νλ λͺ¨λ°μΌ κΈ°κΈ°μμλ JavaScript μ±λ₯ μ΅μ νκ° μ€μν©λλ€. μ λλ‘ μ΅μ νλμ§ μμ μ½λλ μ±λ₯ μ νμ λ°°ν°λ¦¬ μλͺ¨ μ¦κ°λ‘ μ΄μ΄μ§ μ μμ΅λλ€.
- νΈλν½μ΄ λ§μ μΉμ¬μ΄νΈ: μ¬μ©μκ° λ§μ μΉμ¬μ΄νΈμ κ²½μ°, μμ μ±λ₯ κ°μ μ΄λΌλ μλΉν λΉμ© μ κ°κ³Ό ν₯μλ μ¬μ©μ κ²½νμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€. JavaScript μ΅μ νλ μλ² λΆνλ₯Ό μ€μ΄κ³ νμ΄μ§ λ‘λ μκ°μ κ°μ ν μ μμ΅λλ€.
- IoT κΈ°κΈ°: λ§μ IoT κΈ°κΈ°κ° JavaScript μ½λλ₯Ό μ€νν©λλ€. μ΄ μ½λλ₯Ό μ΅μ ννλ κ²μ μ΄λ¬ν κΈ°κΈ°μ μνν μλμ 보μ₯νκ³ μ λ ₯ μλΉλ₯Ό μ΅μννλ λ° νμμ μ λλ€.
- ν¬λ‘μ€ νλ«νΌ μ ν리μΌμ΄μ : React Nativeλ Electronκ³Ό κ°μ νλ μμν¬λ‘ ꡬμΆλ μ ν리μΌμ΄μ μ JavaScriptμ ν¬κ² μμ‘΄ν©λλ€. μ΄λ¬ν μ ν리μΌμ΄μ μ JavaScript μ½λλ₯Ό μ΅μ ννλ©΄ μ¬λ¬ νλ«νΌμμ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
μλ₯Ό λ€μ΄, μΈν°λ· λμνμ΄ μ νλ κ°λ°λμκ΅μμλ νμΌ ν¬κΈ°λ₯Ό μ€μ΄κ³ λ‘λ© μκ°μ κ°μ νκΈ° μν΄ JavaScriptλ₯Ό μ΅μ ννλ κ²μ΄ μ’μ μ¬μ©μ κ²½νμ μ 곡νλ λ° νΉν μ€μν©λλ€. λ§μ°¬κ°μ§λ‘, κΈλ‘λ² κ³ κ°μ λμμΌλ‘ νλ μ μμκ±°λ νλ«νΌμ κ²½μ°, μ±λ₯ μ΅μ νλ μ΄νλ₯ μ μ€μ΄κ³ μ νμ¨μ λμ΄λ λ° λμμ΄ λ μ μμ΅λλ€.
μ±λ₯ λΆμ λ° κ°μ μ μν λꡬ
JavaScript μ½λμ μ±λ₯μ λΆμνκ³ κ°μ νλ λ° λμμ΄ λλ μ¬λ¬ λκ΅¬κ° μμ΅λλ€:
- Chrome DevTools: Chrome DevToolsλ μ½λμ μ±λ₯ λ³λͺ© νμμ μλ³νλ λ° λμμ΄ λλ κ°λ ₯ν νλ‘νμΌλ§ λꡬ μΈνΈλ₯Ό μ 곡ν©λλ€. Performance νμ μ¬μ©νμ¬ μ ν리μΌμ΄μ νλμ νμλΌμΈμ κΈ°λ‘νκ³ CPU μ¬μ©λ, λ©λͺ¨λ¦¬ ν λΉ, κ°λΉμ§ 컬λ μ μ λΆμνμμμ€.
- Node.js Profiler: Node.jsλ μλ² μΈ‘ JavaScript μ½λμ μ±λ₯μ λΆμνλ λ° λμμ΄ λλ λ΄μ₯ νλ‘νμΌλ¬λ₯Ό μ 곡ν©λλ€. Node.js μ ν리μΌμ΄μ
μ μ€νν λ
--profνλκ·Έλ₯Ό μ¬μ©νμ¬ νλ‘νμΌλ§ νμΌμ μμ±νμμμ€. - Lighthouse: Lighthouseλ μΉ νμ΄μ§μ μ±λ₯, μ κ·Όμ± λ° SEOλ₯Ό κ°μ¬νλ μ€ν μμ€ λꡬμ λλ€. μΉμ¬μ΄νΈλ₯Ό κ°μ ν μ μλ μμμ λν κ·μ€ν ν΅μ°°λ ₯μ μ 곡ν μ μμ΅λλ€.
- Benchmark.js: Benchmark.jsλ λ€λ₯Έ μ½λ μ€λν«μ μ±λ₯μ λΉκ΅ν μ μλ JavaScript λ²€μΉλ§νΉ λΌμ΄λΈλ¬λ¦¬μ λλ€. Benchmark.jsλ₯Ό μ¬μ©νμ¬ μ΅μ ν λ Έλ ₯μ μν₯μ μΈ‘μ νμμμ€.
κ²°λ‘
V8μ μΈλΌμΈ μΊμ± λ©μ»€λμ¦μ JavaScriptμμ μμ± μ κ·Όμ ν¬κ² κ°μννλ κ°λ ₯ν μ΅μ ν κΈ°μ μ λλ€. μΈλΌμΈ μΊμ±μ μλ λ°©μ, λ€νμ±μ΄ λ―ΈμΉλ μν₯, κ·Έλ¦¬κ³ μ€μ©μ μΈ μ΅μ ν μ λ΅μ μ μ©ν¨μΌλ‘μ¨ λ μ±λ₯ μ’μ JavaScript μ½λλ₯Ό μμ±ν μ μμ΅λλ€. μΌκ΄λ ννμ κ°μ²΄ μμ±, μμ± μμ λ°©μ§, νμ λ³λ μ΅μνλ νμμ μΈ κ΄νμμ κΈ°μ΅νμμμ€. μ½λ λΆμ λ° λ²€μΉλ§νΉμ μν μ΅μ λꡬλ₯Ό μ¬μ©νλ κ² λν JavaScript μ΅μ ν κΈ°μ μ μ΄μ μ κ·Ήλννλ λ° μ€μν μν μ ν©λλ€. μ΄λ¬ν μΈ‘λ©΄μ μ§μ€ν¨μΌλ‘μ¨ μ μΈκ³ κ°λ°μλ€μ μ ν리μΌμ΄μ μ±λ₯μ ν₯μμν€κ³ , λ λμ μ¬μ©μ κ²½νμ μ 곡νλ©°, λ€μν νλ«νΌκ³Ό νκ²½μμ 리μμ€ μ¬μ©μ μ΅μ νν μ μμ΅λλ€.
μ§μμ μΌλ‘ μ½λλ₯Ό νκ°νκ³ μ±λ₯ ν΅μ°°λ ₯μ λ°λΌ κ΄νμ μ‘°μ νλ κ²μ λμ μΈ JavaScript μνκ³μμ μ΅μ νλ μ ν리μΌμ΄μ μ μ μ§νλ λ° λ§€μ° μ€μν©λλ€.