μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄(Object)λ λ§€μ° μ€μν κ°λ μ λλ€. κ°μ²΄λ λ€μν λ°μ΄ν°λ₯Ό νλμ κ΅¬μ‘°λ‘ λ¬Άμ΄ κ΄λ¦¬ν μ μκ² ν΄ μ€λλ€. μ΄ κΈμμλ μλ°μ€ν¬λ¦½νΈ κ°μ²΄μ λν κΈ°λ³Έ κ°λ λΆν° κ³ κΈ νμ©λ²κΉμ§λ₯Ό μμΈν μ€λͺ νκ² μ΅λλ€.
β£ λͺ©μ°¨
μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄μ λ°°μ΄μ μ£Όμ μ°¨μ΄μ μ λ°μ΄ν° ꡬ쑰μ μμ΅λλ€. κ°μ²΄λ ν€-κ° μμΌλ‘ ꡬμ±λμ΄ μμ΄μ κ° λ°μ΄ν°μ μ΄λ¦μ μ§μ ν μ μμ΅λλ€. λ°λ©΄, λ°°μ΄μ μμκ° μλ 리μ€νΈ ννλ‘ λ°μ΄ν°λ₯Ό μ μ₯ν©λλ€. κ°μ²΄λ κ° λ°μ΄ν°μ κ³ μ ν μλ³μ(ν€)λ₯Ό λΆμ¬νκ³ , λ°°μ΄μ μμμ λ°λΌ μΈλ±μ€λ‘ μ κ·Όν μ μμ΅λλ€.
λ°°μ΄μ κ΄ν λ΄μ©μ μλ ν¬μ€ν
μ μ°Έκ³ ν΄ μ£ΌμΈμπ
01. κ°μ²΄μ κΈ°λ³Έ κ°λ π
μλ°μ€ν¬λ¦½νΈ κ°μ²΄λ λ°μ΄ν°λ₯Ό ꡬ쑰ννκ³ μ μ₯νλ λ° μ¬μ©νλ κΈ°λ³Έ λ¨μμ
λλ€. κ°μ²΄λ μμ±(νλ‘νΌν°)κ³Ό λ©μλ(ν¨μ)λ‘ κ΅¬μ±λλ©°, κ°κ°μ μμ±μ ν€μ κ°μ μμΌλ‘ μ΄λ£¨μ΄μ Έ μμ΅λλ€. μλ°μ€ν¬λ¦½νΈ κ°μ²΄μ κΈ°λ³Έ κ°λ
μ μ΄ν΄νλ κ²μ μΉ κ°λ°μ ν΅μ¬μ
λλ€.
κ°μ²΄μ μ μ
κ°μ²΄λ ν€μ κ°μ μμΌλ‘ ꡬμ±λ λ°μ΄ν° ꡬ쑰μ λλ€. ν€λ λ¬Έμμ΄μ΄κ³ , κ°μ μ΄λ€ νμ μ΄λ κ°λ₯ν©λλ€. μλ°μ€ν¬λ¦½νΈμμλ κ°μ²΄ 리ν°λ΄ νκΈ°λ²μ μ¬μ©νμ¬ μ½κ² κ°μ²΄λ₯Ό λ§λ€ μ μμ΅λλ€.
const person = {
name: 'John',
age: 30,
city: 'New York'
};
μμ μμ μμ person κ°μ²΄λ name, age, cityλΌλ μΈ κ°μ§ μμ±μ κ°μ§κ³ μμ΅λλ€.
02. μλ°μ€ν¬λ¦½νΈ κ°μ²΄ μμ± λ° μ¬μ©π‘
μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄λ₯Ό μμ±νλ λ°©λ²μ λ€μν©λλ€. κ°μ²΄ 리ν°λ΄, μμ±μ ν¨μ, ES6 ν΄λμ€ λ¬Έλ² λ±μ μ¬μ©ν μ μμ΅λλ€.
1. κ°μ²΄ 리ν°λ΄μ μ¬μ©ν κ°μ²΄ μμ±
κ°μ²΄ 리ν°λ΄μ κ°μ₯ κ°λ¨νκ³ λ리 μ¬μ©λλ λ°©λ²μΌλ‘, μ€κ΄νΈ {}λ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±νλ κ²μ λλ€. μ΄ λ°©λ²μ κ°μ²΄λ₯Ό μ§μ μ μνκ³ μ΄κΈ°νν λ μ μ©ν©λλ€.
μμ: κ°μ²΄ 리ν°λ΄μ μ¬μ©ν κ°μ²΄ μμ±
// κ°μ²΄ 리ν°λ΄λ‘ κ°μ²΄ μμ±
let person = {
name: "John",
age: 30,
greet: function() {
console.log(`Hello, my name is ${this.name}.`);
}
};
console.log(person); // { name: "John", age: 30, greet: [Function: greet] }
person.greet(); // Hello, my name is John.
"
νΉμ§
- μ€κ΄νΈ {} λ΄λΆμ key: value ννλ‘ νλ‘νΌν°λ₯Ό μ μν©λλ€.
- κ° νλ‘νΌν°λ μΌνλ‘ κ΅¬λΆλ©λλ€.
- ν¨μ(λ©μλ)λ₯Ό ν¬ν¨ν μ μμΌλ©°, ν¨μλ μΌλ° ν¨μ μ μΈ λλ ES6 νμ΄ν ν¨μλ‘ μ μν μ μμ΅λλ€.
- κ°μ²΄ 리ν°λ΄μ μ¬μ©νλ©΄ κ°μ²΄λ₯Ό κ°νΈνκ² μ μνκ³ μ΄κΈ°νν μ μμ΅λλ€.
μΆκ° μμ: κ³μ°λ μμ± μ΄λ¦ (Computed Property Names)
κ³μ°λ μμ± μ΄λ¦(computed property names)μ μ¬μ©νλ©΄ κ°μ²΄ 리ν°λ΄ λ΄μμ νλ‘νΌν° μ΄λ¦μ λμ μΌλ‘ μ μν μ μμ΅λλ€.
let propertyName = "age";
let person = {
name: "John",
[propertyName]: 30,
};
console.log(person); // { name: "John", age: 30 }
μ£Όμμ¬ν
- κ°μ²΄ 리ν°λ΄μ μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±ν λλ λ¨μΌ μΈμ€ν΄μ€λ§ μμ±λ©λλ€. μ¦, ν΄λμ€λ μμ±μ ν¨μλ₯Ό μ¬μ©νμ¬ μ¬λ¬ μΈμ€ν΄μ€λ₯Ό μμ±νλ κ²κ³Όλ λ€λ¦ λλ€.
- κ°μ²΄ 리ν°λ΄μ μ½λμ κ°λ μ±μ λμ΄κ³ κ°νΈνκ² κ°μ²΄λ₯Ό μ μν μ μμ΄ λ§€μ° μ μ©ν©λλ€.
κ°μ²΄ 리ν°λ΄μ νμ©
- λ¨μν λ°μ΄ν° ꡬ쑰: κ°λ¨ν ꡬ쑰μ λ°μ΄ν°λ₯Ό ννν λ μ μ©ν©λλ€.
- κ°μ²΄ μ΄κΈ°ν: μ΄κΈ° κ°μ΄ μλ κ°μ²΄λ₯Ό ν¨μ¨μ μΌλ‘ μμ±ν μ μμ΅λλ€.
- JSON λ°μ΄ν°: JSONκ³Ό μ μ¬ν ννμ λ°μ΄ν°λ₯Ό μλ°μ€ν¬λ¦½νΈ κ°μ²΄λ‘ λ³νν λ νμ©λ μ μμ΅λλ€.
2. μμ±μ ν¨μλ₯Ό μ¬μ©ν κ°μ²΄ μμ±
μμ±μ ν¨μλ κ°μ²΄λ₯Ό μμ±νκ³ μ΄κΈ°ννλ ν¨μμ λλ€. μΌλ° ν¨μμ μ μ¬νκ² μ μλμ§λ§, μΌλ°μ μΌλ‘ 첫 κΈμλ₯Ό λλ¬Έμλ‘ μμνμ¬ κ΅¬λ³ν©λλ€. μμ±μ ν¨μλ new μ°μ°μμ ν¨κ» νΈμΆλμ΄ κ°μ²΄λ₯Ό μΈμ€ν΄μ€νν©λλ€.
μμ: μμ±μ ν¨μλ₯Ό μ¬μ©ν κ°μ²΄ μμ±
// μμ±μ ν¨μ μ μ
function Person(name, age) {
this.name = name;
this.age = age;
}
// μΈμ€ν΄μ€ μμ±
let person1 = new Person("John", 30);
let person2 = new Person("Jane", 25);
console.log(person1); // Person { name: "John", age: 30 }
console.log(person2); // Person { name: "Jane", age: 25 }
νΉμ§
- μμ±μ ν¨μ λ΄λΆμμ this ν€μλλ₯Ό μ¬μ©νμ¬ κ°μ²΄μ νλ‘νΌν°λ₯Ό μ μνκ³ μ΄κΈ°νν©λλ€.
- new μ°μ°μλ₯Ό μ¬μ©νμ¬ μμ±μ ν¨μλ₯Ό νΈμΆν λ, μλ‘μ΄ κ°μ²΄κ° μμ±λκ³ thisλ μ΄ μλ‘μ΄ κ°μ²΄λ₯Ό κ°λ¦¬ν΅λλ€.
- μμ±μ ν¨μλ μΌλ° ν¨μμ λμΌνκ² λ©μλλ μ μν μ μμ΅λλ€.
3. ES6 ν΄λμ€ λ¬Έλ²μ μ¬μ©ν κ°μ²΄ μμ±: new Object()
ES6μμ λμ λ ν΄λμ€λ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ ν΄λμ€ κ°λ κ³Ό μ μ¬νκ² μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄λ₯Ό μμ±νλ λ¬Έλ²μ μ€ν(syntactic sugar)μ λλ€. ν΄λμ€λ₯Ό μ¬μ©νλ©΄ μμ±μ ν¨μλ³΄λ€ λ κ°κ²°νκ³ λͺ νν μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
μμ: ν΄λμ€λ₯Ό μ¬μ©ν κ°μ²΄ μμ±
// ν΄λμ€ μ μ
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log(`Hello, my name is ${this.name}.`);
}
}
// μΈμ€ν΄μ€ μμ±
let person1 = new Person("John", 30);
let person2 = new Person("Jane", 25);
console.log(person1); // Person { name: "John", age: 30 }
console.log(person2); // Person { name: "Jane", age: 25 }
person1.sayHello(); // Hello, my name is John.
person2.sayHello(); // Hello, my name is Jane.
νΉμ§
- ν΄λμ€λ class ν€μλλ₯Ό μ¬μ©νμ¬ μ μλ©λλ€.
- constructor λ©μλλ κ°μ²΄κ° μμ±λ λ νΈμΆλλ©°, κ°μ²΄μ μ΄κΈ°νλ₯Ό λ΄λΉν©λλ€.
- ν΄λμ€ λ΄λΆμμ λ©μλλ ν¨μ μ μΈλ§μΌλ‘ μ μν μ μμ΅λλ€.
- ν΄λμ€λ μμμ μ§μνλ―λ‘, κΈ°μ‘΄ ν΄λμ€λ₯Ό νμ₯νμ¬ μλ‘μ΄ ν΄λμ€λ₯Ό μ μν μ μμ΅λλ€.
μ ν κΈ°μ€
- κ°λ μ±κ³Ό μ μ§λ³΄μμ±: ν΄λμ€λ μΌλ°μ μΌλ‘ κ°λ μ±μ΄ λκ³ μ§κ΄μ μ λλ€. μ½λλ₯Ό μ½κ³ μ΄ν΄νκΈ° μ½κ² λ§λ€μ΄μ€λλ€.
- μμκ³Ό νμ₯: ν΄λμ€λ μμμ ν΅ν΄ μ½λμ μ¬μ¬μ©μ±μ λμΌ μ μμ΅λλ€. μμ κ΄κ³κ° νμν κ²½μ° ν΄λμ€λ₯Ό μ¬μ©νλ κ²μ΄ μ 리ν©λλ€.
- ES6 μ§μ μ¬λΆ: μ΅μ μλ°μ€ν¬λ¦½νΈ νκ²½μμλ ν΄λμ€λ₯Ό μ¬μ©νλ κ²μ΄ κΆμ₯λ©λλ€. λν, ν΄λμ€λ λͺ¨λνμ κ²°ν©μ±μ λ μ λ€λ£° μ μμ΅λλ€.
03. κ°μ²΄ νλ‘νΌν° μ κ·Όκ³Ό μμ π§
κ°μ²΄μ μμ±μ μ κ·Όνλ λ°©λ²μ λ κ°μ§κ° μμ΅λλ€: μ νκΈ°λ²(dot notation)κ³Ό λκ΄νΈ νκΈ°λ²(bracket notation)μ λλ€.
1. μ νκΈ°λ² (Dot Notation)
μ νκΈ°λ²μ κ°μ²΄μ μμ±λͺ μ μ§μ μ (.) λ€μ λΆμ¬μ μ κ·Όνλ λ°©μμ λλ€. μ΄ λ°©λ²μ μμ±λͺ μ΄ μ ν¨ν λ³μλͺ κ·μΉμ λ°λΌμΌ ν©λλ€.
let person = {
name: "John",
age: 30,
address: {
city: "New York",
zipcode: "10001"
}
};
console.log(person.name); // "John"
console.log(person.age); // 30
console.log(person.address.city); // "New York"
console.log(person.address.zipcode); // "10001"
2. λκ΄νΈ νκΈ°λ² (Bracket Notation)
λκ΄νΈ νκΈ°λ²μ κ°μ²΄μ μμ±λͺ μ λ¬Έμμ΄ ννλ‘ λκ΄νΈ([]) μμ λ£μ΄ μ κ·Όνλ λ°©μμ λλ€. μ΄ λ°©λ²μ μ¬μ©νλ©΄ κ°μ²΄ μμ±λͺ μΌλ‘ λ³μλ₯Ό μ¬μ©ν μ μκ³ , νΉμ λ¬Έμλ κ³΅λ°±μ΄ ν¬ν¨λ μμ±λͺ μ μ κ·Όν μ μμ΅λλ€.
let person = {
name: "John",
age: 30,
"home address": "123 Main St"
};
let propertyName = "name";
console.log(person[propertyName]); // "John"
console.log(person["age"]); // 30
console.log(person["home address"]); // "123 Main St"
λμ μμ± μ κ·Ό
λκ΄νΈ νκΈ°λ²μ μμ±λͺ μ λμ μΌλ‘ κ²°μ ν μ μλ μ₯μ μ΄ μμ΅λλ€. μ μμ μμ propertyName λ³μμ μ μ₯λ μμ±λͺ μ μ΄μ©ν΄ μ κ·Όν μ μμ΅λλ€. μ΄λ νλ‘κ·Έλλ°ν λ μ μ©νκ² μ¬μ©λ μ μμ΅λλ€.
let person = {
name: "John",
age: 30,
};
let propertyName = "age";
console.log(person[propertyName]); // 30
μ‘΄μ¬νμ§ μλ μμ±μ μ κ·Όν λ
μ νκΈ°λ²μΌλ‘ μ‘΄μ¬νμ§ μλ μμ±μ μ κ·Όνλ©΄ undefinedκ° λ°νλ©λλ€. λ°λ©΄μ λκ΄νΈ νκΈ°λ²μμλ μ‘΄μ¬νμ§ μλ μμ±μ μ κ·Όνλ©΄ undefinedκ° λ°νλ©λλ€.
κ°μ²΄μ μμ± μμ , μΆκ°, μμ
μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄μ μμ±μ λ€λ£¨λ λ°©λ²μ κ°λ¨νμ§λ§ μ€μν©λλ€. κ°μ²΄μ μμ±μ μμ , μΆκ°, μμ ν μ μλ λ°©λ²μ μμλ³΄κ² μ΅λλ€.
1. μμ± μμ (Property Modification)
κΈ°μ‘΄ κ°μ²΄μ μμ± κ°μ λ³κ²½νλ κ²μ μμ± μμ μ΄λΌκ³ ν©λλ€. μ νκΈ°λ²κ³Ό λκ΄νΈ νκΈ°λ² λͺ¨λ μ¬μ© κ°λ₯ν©λλ€.
let person = {
name: "John",
age: 30,
};
person.age = 31; // μ νκΈ°λ²
person["name"] = "Jane"; // λκ΄νΈ νκΈ°λ²
console.log(person); // { name: "Jane", age: 31 }
2. μμ± μΆκ° (Property Addition)
κ°μ²΄μ μλ‘μ΄ μμ±μ μΆκ°ν μ μμ΅λλ€. μ΄λ―Έ μ‘΄μ¬νλ μμ±μ λν΄μλ λμΌν λ°©λ²μΌλ‘ μΆκ°ν μ μμ΅λλ€.
let person = {
name: "John",
age: 30,
};
person.address = "123 Main St"; // μ νκΈ°λ²
person["email"] = "john@example.com"; // λκ΄νΈ νκΈ°λ²
console.log(person); // { name: "John", age: 30, address: "123 Main St", email: "john@example.com" }
3. μμ± μμ (Property Deletion)
κ°μ²΄μμ μμ±μ μμ ν λλ delete ν€μλλ₯Ό μ¬μ©ν©λλ€. μ νκΈ°λ²κ³Ό λκ΄νΈ νκΈ°λ² λͺ¨λ μ¬μ© κ°λ₯ν©λλ€.
let person = {
name: "John",
age: 30,
address: "123 Main St",
};
delete person.age; // μ νκΈ°λ²
delete person["address"]; // λκ΄νΈ νκΈ°λ²
console.log(person); // { name: "John" }
μ£Όμμ¬ν
- delete ν€μλλ‘ μμ λ μμ±μ κ°μ²΄ λ΄λΆμ λ μ΄μ μ‘΄μ¬νμ§ μμ΅λλ€.
- μμ λ μμ±μ μ κ·Όνλ©΄ undefinedκ° λ°νλ©λλ€.
- λ°°μ΄μ μμ μμ μλ λ€λ₯΄κ², κ°μ²΄ μμ± μμ λ λ©λͺ¨λ¦¬μμ ν΄λΉ μμ±μ μ κ±°νμ§ μμ΅λλ€. κ°μ²΄μ λ€λ₯Έ μ°Έμ‘°μμλ μ¬μ ν μ κ·Όν μ μμ΅λλ€.
04. κ°μ²΄μ νΉμ±κ³Ό const μ μΈπ
μλ°μ€ν¬λ¦½νΈμμ const ν€μλλ₯Ό μ¬μ©νμ¬ λ³μλ₯Ό μ μΈνλ©΄ ν΄λΉ λ³μλ μ¬ν λΉμ΄ λΆκ°λ₯ν©λλ€. νμ§λ§ κ°μ²΄μ κ²½μ°, constλ‘ μ μΈν νμλ κ°μ²΄ λ΄λΆμ νλ‘νΌν°λ λ³κ²½ν μ μμ΅λλ€. μ΄λ κ°μ²΄ μμ²΄κ° λ©λͺ¨λ¦¬μ ν λΉλ μ£Όμλ₯Ό κ°λ¦¬ν€λ κ°μ΄ constλ‘ μ μΈλκΈ° λλ¬Έμ λλ€. κ°μ²΄ μ체μ λ©λͺ¨λ¦¬ μ£Όμκ° λ³νμ§ μμΌλ©°, κ·Έ μμ λ΄μ©(νλ‘νΌν°)λ§ λ³κ²½ κ°λ₯ν©λλ€.
const icecream = {
flavor: "λ―ΌνΈ μ΄μ½",
color: "λ―ΌνΈ",
};
console.log(icecream); // { flavor: "λ―ΌνΈ μ΄μ½", color: "λ―ΌνΈ" }
// κ°μ²΄μ νλ‘νΌν°λ λ³κ²½ κ°λ₯
icecream.color = "μ΄μ½";
console.log(icecream); // { flavor: "λ―ΌνΈ μ΄μ½", color: "μ΄μ½" }
// κ°μ²΄ μ체λ₯Ό μ¬ν λΉνλ €κ³ νλ©΄ μ€λ₯ λ°μ
// icecream = {}; // TypeError: Assignment to constant variable.
// κ°μ²΄μ μλ‘μ΄ νλ‘νΌν° μΆκ°λ κ°λ₯
icecream.newFlavor = "λ°λλΌ";
console.log(icecream); // { flavor: "λ―ΌνΈ μ΄μ½", color: "μ΄μ½", newFlavor: "λ°λλΌ" }
μ μμ μμ λ³Ό μ μλ―μ΄, icecream κ°μ²΄λ constλ‘ μ μΈλμμ§λ§, κ°μ²΄ λ΄λΆμ νλ‘νΌν°λ€μ μμ λ‘κ² μμ ν μ μμ΅λλ€. κ·Έλ¬λ κ°μ²΄ μ체λ₯Ό λ€λ₯Έ κ°μ²΄λ‘ λ³κ²½νλ €κ³ νλ©΄ μ€λ₯κ° λ°μν©λλ€.
μ΄λ¬ν λμμ κ°μ²΄κ° κΈ°λ³Έμ μΌλ‘ μ°Έμ‘° νμ
μ΄κΈ° λλ¬Έμ λ°μνλ κ²μ
λλ€. κ°μ²΄κ° ν λΉλ λ³μλ κ°μ²΄μ λ©λͺ¨λ¦¬ μμΉ(μ°Έμ‘°)λ₯Ό κ°λ¦¬ν€λ©°, constλ μ΄ μ°Έμ‘° κ°μ λ³κ²½ν μ μκ² λ§λλλ€. λ°λΌμ κ°μ²΄μ λ΄μ©(νλ‘νΌν°)μ μμ ν μ μμ§λ§, λ€λ₯Έ κ°μ²΄λ‘μ μμ ν μ¬ν λΉμ λΆκ°λ₯ν©λλ€.
μ΄ νΉμ±μ μ΄ν΄νλ©΄μ constλ‘ μ μΈν κ°μ²΄λ₯Ό μμ νκ² μ¬μ©νκ³ , κ°μ²΄ λ΄λΆμ λ³κ²½μ΄ νμν κ²½μ°μλ νλ‘νΌν° μμ μ νμ©νλ κ²μ΄ μ’μ΅λλ€.
κ°μ²΄μ ν€μ κ° μΆμΆπ
μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄μ ν€μ κ°μ λ€μν λ°©λ²μΌλ‘ μΆμΆν μ μμ΅λλ€. μ£Όλ‘ Object.keys(), Object.values(), Object.entries() λ©μλλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μ‘°μν μ μμ΅λλ€.
1. Object.keys(): κ°μ²΄μ ν€(key) μΆμΆ
Object.keys() λ©μλλ κ°μ²΄μ λͺ¨λ ν€λ₯Ό λ°°μ΄λ‘ λ°νν©λλ€.
let person = {
name: "John",
age: 30,
city: "New York",
};
let keys = Object.keys(person);
console.log(keys); // ["name", "age", "city"]
2. Object.values(): κ°μ²΄μ κ°(value) μΆμΆ
Object.values() λ©μλλ κ°μ²΄μ λͺ¨λ κ°λ€μ λ°°μ΄λ‘ λ°νν©λλ€.
let person = {
name: "John",
age: 30,
city: "New York",
};
let values = Object.values(person);
console.log(values); // ["John", 30, "New York"]
3. Object.entries(): ν€(key)μ κ°(value)μ μ μΆμΆ
Object.entries() λ©μλλ κ°μ²΄μ κ° ν€μ κ°μ μμ [key, value] ννμ λ°°μ΄λ‘ λ°νν©λλ€.
let person = {
name: "John",
age: 30,
city: "New York",
};
let entries = Object.entries(person);
console.log(entries);
// [
// ["name", "John"],
// ["age", 30],
// ["city", "New York"]
// ]
μ£Όμμ¬ν
- Object.keys(), Object.values(), Object.entries() λ©μλλ λͺ¨λ κ°μ²΄μ μ΄κ±° κ°λ₯ν(enumerable) μμ±λ§ λ°νν©λλ€.
- μμλ°μ νλ‘νΌν°λ μ΄κ±°ν μ μλ(non-enumerable) νλ‘νΌν°λ ν¬ν¨λμ§ μμ΅λλ€.
- λ°νλ λ°°μ΄μ μμλ κ°μ²΄μ νλ‘νΌν°λ₯Ό μ μν μμμ λμΌν©λλ€.
κ°μ²΄ 볡μ¬μ μ°Έμ‘°π
μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄λ μ°Έμ‘° νμ (reference type)μ΄λ―λ‘ λ³μμ ν λΉλ λ κ°μ²΄ μμ²΄κ° λ³΅μ¬λλ κ²μ΄ μλλΌ κ°μ²΄μ μ°Έμ‘°(λ©λͺ¨λ¦¬ μ£Όμ)κ° λ³΅μ¬λ©λλ€. λ°λΌμ κ°μ²΄λ₯Ό 볡μ¬νλ©΄ 볡μ¬λ λ³μμ μλ³Έ λ³μλ κ°μ κ°μ²΄λ₯Ό μ°Έμ‘°νκ² λ©λλ€. μ΄ κ°λ μ μ΄ν΄νκΈ° μν΄ μ¬λ¬ λ°©λ²μ μ΄ν΄λ³Ό μ μμ΅λλ€. κ°μ²΄ 볡μ¬μ μ°Έμ‘°λ λ©λͺ¨λ¦¬ κ΄λ¦¬μ κ°μ²΄μ μν λ³κ²½μ μ€μν μν₯μ λ―ΈμΉ©λλ€.
κ°μ²΄μ μ°Έμ‘°
μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄λ λ³μμ ν λΉλ λ κ°μ²΄ μμ²΄κ° λ³΅μ¬λλ κ²μ΄ μλλΌ κ°μ²΄μ μ°Έμ‘°(λ©λͺ¨λ¦¬ μ£Όμ)κ° λ³΅μ¬λ©λλ€. λ°λΌμ ν λ³μλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό λ³κ²½νλ©΄ λ€λ₯Έ λ³μμμλ λ³κ²½λ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μμ΅λλ€.
let originalObj = {
name: "John",
};
let cloneObj = originalObj; // μ°Έμ‘° 볡μ¬
cloneObj.name = "Jane";
console.log(originalObj.name); // "Jane"
console.log(cloneObj.name); // "Jane"
μμ μμμμ originalObjμ cloneObjλ λμΌν κ°μ²΄λ₯Ό μ°Έμ‘°νλ―λ‘ νλμ κ°μ²΄λ₯Ό μμ νλ©΄ λ€λ₯Έ λ³μμμλ μμ λ λ΄μ©μ λ³Ό μ μμ΅λλ€.
μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄λ₯Ό 볡μ¬νκ³ μ°Έμ‘°νλ λ°©λ²μ κ°μ²΄μ ꡬ쑰μ 볡μ‘μ±μ λ°λΌ λ€λ¦
λλ€. μμ 볡μ¬λ κ°μ²΄μ μ΅μμ λ 벨 νλ‘νΌν°λ€λ§ 볡μ¬νλ©° λ΄λΆ κ°μ²΄λ μ°Έμ‘°λ₯Ό μ μ§ν©λλ€. κΉμ 볡μ¬λ λ΄λΆ ꡬ쑰κΉμ§ μ¬κ·μ μΌλ‘ 볡μ¬νμ¬ μμ ν λ
립μ μΈ μλ‘μ΄ κ°μ²΄λ₯Ό λ§λλλ€.
1. μμ λ³΅μ¬ (Shallow Copy)
κ°μ²΄μ μ΅μμ μμ±λ€λ§ 볡μ¬λλ λ°©μμ λλ€. λ΄λΆ κ°μ²΄λ λ°°μ΄μ μ°Έμ‘°λ‘ λ³΅μ¬λ©λλ€.
λ°©λ² 1: Spread μ°μ°μ μ¬μ©
let originalObj = {
name: "John",
age: 30,
address: {
city: "New York",
zipcode: "10001"
}
};
// Spread μ°μ°μλ₯Ό μ΄μ©ν μμ 볡μ¬
let cloneObj = { ...originalObj };
console.log(cloneObj === originalObj); // false
console.log(cloneObj); // { name: "John", age: 30, address: { city: "New York", zipcode: "10001" } }
// λ΄λΆ κ°μ²΄λ λμΌν κ°μ²΄λ₯Ό μ°Έμ‘°
console.log(cloneObj.address === originalObj.address); // true
λ°©λ² 2: Object.assign() λ©μλ μ¬μ©
let originalObj = {
name: "John",
age: 30,
address: {
city: "New York",
zipcode: "10001"
}
};
// Object.assign() λ©μλλ₯Ό μ΄μ©ν μμ 볡μ¬
let cloneObj = Object.assign({}, originalObj);
console.log(cloneObj === originalObj); // false
console.log(cloneObj); // { name: "John", age: 30, address: { city: "New York", zipcode: "10001" } }
// λ΄λΆ κ°μ²΄λ λμΌν κ°μ²΄λ₯Ό μ°Έμ‘°
console.log(cloneObj.address === originalObj.address); // true
2. κΉμ λ³΅μ¬ (Deep Copy)
κΉμ 볡μ¬λ κ°μ²΄μ λͺ¨λ ꡬ쑰λ₯Ό μ¬κ·μ μΌλ‘ 볡μ¬νμ¬ μμ ν μλ‘μ΄ κ°μ²΄λ₯Ό λ§λλ λ°©μμ λλ€. κ°μ²΄μ λͺ¨λ λ 벨μμ 볡μ¬κ° μ΄λ£¨μ΄μ§λλ€.
λ°©λ² 1: μ¬κ·μ ν¨μ μ¬μ©
function deepCopy(obj) {
let result = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (typeof obj[key] === 'object' && obj[key] !== null) {
result[key] = deepCopy(obj[key]); // μ¬κ·μ μΌλ‘ λ΄λΆ κ°μ²΄ 볡μ¬
} else {
result[key] = obj[key]; // κΈ°λ³Έ νμ
κ° λ³΅μ¬
}
}
return result;
}
let obj = {
a: 1,
b: {
c: 2
}
};
let deepClone = deepCopy(obj);
console.log(deepClone); // { a: 1, b: { c: 2 } }
console.log(obj === deepClone); // false
console.log(obj.b === deepClone.b); // false (λ΄λΆ κ°μ²΄λ μλ‘μ΄ κ°μ²΄λ‘ 볡μ¬λ¨)
λ°©λ² 2: μΈλΆ λΌμ΄λΈλ¬λ¦¬ μ¬μ© (lodashμ _.cloneDeep() μμ)
const _ = require('lodash');
let obj = {
a: 1,
b: {
c: 2
}
};
let deepClone = _.cloneDeep(obj);
console.log(deepClone); // { a: 1, b: { c: 2 } }
console.log(obj === deepClone); // false
console.log(obj.b === deepClone.b); // false (λ΄λΆ κ°μ²΄λ μλ‘μ΄ κ°μ²΄λ‘ 볡μ¬λ¨)
μ£Όμμ¬ν
- μμ 볡μ¬λ κ°μ²΄μ λ΄λΆ κ°μ²΄λ μ°Έμ‘°λ₯Ό 곡μ νμ§λ§, κΉμ 볡μ¬λ λͺ¨λ λ΄λΆ κ°μ²΄κΉμ§ μλ‘μ΄ λ³΅μ¬λ³Έμ λ§λλλ€.
- κΉμ 볡μ¬λ μ¬κ·μ μΌλ‘ λͺ¨λ μμ±μ 볡μ¬νκΈ° λλ¬Έμ μ±λ₯μ μΈ μΈ‘λ©΄μμ λΉμ©μ΄ λ§μ΄ λ€ μ μμ΅λλ€.
- κ°μ²΄κ° 볡μ‘νκ³ μ€μ²©λ κ²½μ°μλ κΉμ 볡μ¬λ₯Ό μ¬μ©νλ κ²μ΄ μμ ν©λλ€.
κ°μ²΄λ₯Ό 볡μ¬ν λλ 볡μ¬μ κΉμ΄μ μ±λ₯ μꡬ μ¬νμ κ³ λ €νμ¬ μ μ ν λ°©λ²μ μ ννλ κ²μ΄ μ€μν©λλ€. μμ 볡μ¬λ κ°λ¨νκ² κ΅¬νν μ μμ§λ§, λ΄λΆ κ°μ²΄μ λ³κ²½μ΄ μλ³Έμλ μν₯μ μ€ μ μμ΅λλ€. κΉμ 볡μ¬λ λͺ¨λ ꡬ쑰λ₯Ό μλ²½νκ² λ³΅μ νμ§λ§, μ²λ¦¬ μκ°μ΄ κΈΈμ΄μ§ μ μμ΅λλ€.
ν΅μ¬ λ΄μ©π