10_κ°μ²΄ 리ν°λ΄
10.1 κ°μ²΄ ?
κ°μ²΄λ κ°μ²΄μ μνλ₯Ό λνλ΄λ κ°(νλ‘νΌν°) κ³Ό κ·Έ κ°μ μ°Έμ‘°νκ³ μ‘°μ ν μ μλ λμ(λ©μλ) μ λͺ¨λ κ°μ§κ³ μλ κ²
- μν(λ°μ΄ν°) μ λμ(λ©μλ) μ νλμ λ¨μλ‘ κ΅¬μ‘°μ ν μ μμ΄ μ μ©νλ€.
μλ°μ€ν¬λ¦½νΈλ κ°μ²΄(object) κΈ°λ°μ νλ‘κ·Έλλ° μΈμ΄ μ΄λ©°,
μλ°μ€ν¬λ¦½νΈλ₯Ό ꡬμ±νλ κ²μ λλΆλΆ κ°μ²΄μ΄λ€.
- μμ κ°μ μ μΈν λλ¨Έμ§ κ°(ν¨μ, λ°°μ΄, ννμ λ±)μ λͺ¨λ κ°μ²΄
- μμ νμ
μ λ¨ νλμ κ°λ§ λνλ΄μ§λ§, κ°μ²΄ νμ
μ λ€μν νμ
μ κ°μ νλμ λ¨μλ‘ κ΅¬μ±ν
볡ν©μ μΈ μλ£κ΅¬μ‘°λ€. - μμ νμ μ κ°μ λ³κ²½ λΆκ°λ₯ν κ°μ΄μ§λ§, κ°μ²΄λ λ³κ²½ κ°λ₯ν κ°μ΄λ€.
- κ°μ²΄λ 0κ° μ΄μμ νλ‘νΌν°λ‘ ꡬμ±λ μ§ν©μ΄λ©°, νλ‘νΌν°λ ν€(key) μ κ°(value) μΌλ‘ ꡬμ±λλ€.
μλ°μ€ν¬λ¦½νΈμμ μ¬μ©ν μ μλ λͺ¨λ κ°μ νλ‘νΌν° κ°μ΄ λ μ μλ€.
- μλ°μ€ν¬λ¦½νΈμ ν¨μλ μΌκΈ κ°μ²΄ μ΄λ―λ‘ κ°μ΄ λ μ μκ³ ,
- μΌκΈ κ°μ²΄ λν νλ‘νΌν° κ°μΌλ‘ μ¬μ© ν μ μλ€.
μΌκΈ κ°μ²΄ ?
λ€λ₯Έ κ°μ²΄λ€μ μΌλ°μ μΌλ‘ μ μ© κ°λ₯ν μ°μ°μ λͺ¨λ μ§μνλ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€. λ³΄ν΅ ν¨μμ 맀κ°λ³μλ‘ λκΈ°κΈ°, μμ νκΈ°, λ³μμ λμ νκΈ°μ κ°μ μ°μ°μ μ§μν λ μΌκΈ κ°μ²΄λΌκ³ νλ€. (μΆμ² : μν€λ°±κ³Ό)
μ¦, νΉμ μΈμ΄μμ κ°μ²΄λ₯Ό κ°μΌλ‘ μ·¨κΈνλ κ²μ λ§νλ€.
β
μλ°μ€ν¬λ¦½νΈμμλ ν¨μκ° μΌκΈκ°μ²΄μ΄λ€.
- 무λͺ μ 리ν°λ΄λ‘ μμ±ν μ μλ€. (λ°νμ μμ±μ΄ κ°λ₯νλ€.)
- λ³μλ μλ£κ΅¬μ‘°(κ°μ²΄, λ°°μ΄ λ±)μ μ μ₯ν μ μλ€.
- ν¨μμ 맀κ°λ³μμ μ λ¬ν μ μλ€.
- ν¨μμ λ°νκ°(return)μΌλ‘λ μ¬μ©ν μ μλ€.
μλ°μ€ν¬λ¦½νΈμ ν¨μλ μ 쑰건μ λͺ¨λ λ§μ‘±νλ―λ‘ μΌκΈ κ°μ²΄μ΄λ€.
10.2 κ°μ²΄ 리ν°λ΄μ μν κ°μ²΄ μμ±
κ°μ²΄ 리ν°λ΄μ μλ°μ€ν¬λ¦½νΈμ μ μ°ν¨ κ³Ό κ°λ ₯ν¨μ λννλ κ°μ²΄ μμ± λ°©μμ΄λ€.
κ°μ²΄λ₯Ό μμ±νκΈ° μν΄ ν΄λμ€λ₯Ό λ¨Όμ μ μνκ³ , new μ°μ°μμ ν¨κ» μμ±μλ₯Ό νΈμΆν νμκ° μλ€.- μ«μ κ°μ΄λ λ¬Έμμ΄μ λ§λλ κ²κ³Ό μ μ¬νκ² λ¦¬ν°λ΄λ‘ κ°μ²΄λ₯Ό μμ±νλ€.
- κ°μ²΄ 리ν°λ΄μ νλ‘νΌν° κ°μ ν¬ν¨μμΌ κ°μ²΄λ₯Ό μμ±ν¨κ³Ό λμμ νλ‘νΌν°λ₯Ό λ§λ€ μ μκ³ ,
- κ°μ²΄λ₯Ό μμ±ν μ΄νμ νλ‘νΌν°λ₯Ό λμ μΌλ‘ μΆκ°ν μ μλ€.
C++μ΄λ μλ°κ°μ ν΄λμ€ κΈ°λ° κ°μ²΄μ§ν₯ μΈμ΄λ
- ν΄λμ€λ₯Ό μ¬μ μ μ μνκ³
- νμν μμ μ new μ°μ°μμ ν¨κ» μμ±μλ₯Ό νΈμΆνμ¬ μΈμ€ν΄μ€(instance)λ₯Ό μμ±νλ λ°©μμΌλ‘ κ°μ²΄λ₯Ό μμ±νλ€.
μΈμ€ν΄μ€(instance) ν΄λμ€μ μν΄ μμ±λμ΄ λ©λͺ¨λ¦¬μ μ μ₯λ μ€μ²΄λ₯Ό μλ―Έ
νμ§λ§, μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ κΈ°λ° κ°μ²΄ μ§ν₯ μΈμ΄ λ‘, ν΄λμ€ κΈ°λ° κ°μ²΄ μ§ν₯μΈμ΄μλ λ¬λ¦¬ λ€μν κ°μ²΄ μμ± λ°©λ²μ μ§μνλ€.
- κ°μ²΄ 리ν°λ΄
- Object μμ±μ ν¨μ
- μμ±μ ν¨μ
- Object.create λ©μλ
- ν΄λμ€(ES6)
νλ‘ν νμ κΈ°λ° κ°μ²΄ μ§ν₯ μΈμ΄
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ ν ννμ κ°λλ‘ ν΄λμ€κ° μκ³ , ν΄λμ€ κΈ°λ° μΈμ΄μμ μμμ μ¬μ©νλ κ²κ³Όλ λ€λ₯΄κ², κ°μ²΄λ₯Ό μνμΌλ‘ νμ¬ λ³΅μ μ κ³Όμ μ ν΅νμ¬ κ°μ²΄μ λμ λ°©μμ λ€μ μ¬μ©ν μ μλ€. ( μΆμ² : μν€λ°±κ³Ό )
κ°μ²΄ μμ± λ°©λ² μ€μμ κ°μ₯ κ°λ¨ν λ°©λ²μ κ°μ²΄ 리ν°λ΄ μ΄λ€.
- μ€κ΄νΈ({...}) λ΄μ 0κ° μ΄μμ νλ‘νΌν°λ₯Ό μ μνλ€.
- λ³μμ ν λΉλλ μμ μ μλ°μ€ν¬λ¦½νΈ μμ§μ κ°μ²΄ 리ν°λ΄μ ν΄μν΄ κ°μ²΄λ₯Ό μμ±νλ€.
리ν°λ΄ (literal) μ¬λμ΄ μ΄ν΄ν μ μλ λ¬Έμ λλ μ½μλ κΈ°νΈλ₯Ό μ¬μ©νμ¬ κ°μ μμ±νλ νκΈ°λ²
var person = {
name: 'april',
sayHello: function () {
console.log(`Hello! My name is ${this.name}.`);
}
};
console.log(typeof person); // object
console.log(person); // {name: "april", sayHello: ƒ}
// μ€κ΄νΈ λ΄μ νλ‘νΌν°λ₯Ό μ μνμ§ μμΌλ©΄ λΉ κ°μ²΄κ° μμ±λλ€.
var empty = {};
console.log(typeof empty); // object
Point
κ°μ²΄ 리ν°λ΄μ μ€κ΄νΈλ μ½λ λΈλ‘μ μλ―Ένμ§ μλλ€.
λ°λΌμ μ½λλΈλ‘μ λ«λ μ€κ΄νΈ λ€μλ μΈλ―Έμ½λ‘ (;)μ λΆμ΄μ§ μμ§λ§ κ°μ²΄ 리ν°λ΄μ λ«λ μ€κ΄νΈ λ€μλ μΈλ―Έμ½λ‘ μ λΆμΈλ€.
10.3 νλ‘νΌν°
κ°μ²΄λ νλ‘νΌν°μ μ§ν©μ΄λ©° νλ‘νΌν°λ ν€μ κ°μΌλ‘ ꡬμ±λλ€.
var person = {
// νλ‘νΌν° ν€λ name, νλ‘νΌν° κ°μ 'april'
name: 'april',
// νλ‘νΌν° ν€λ age, νλ‘νΌν° κ°μ 20
age: 20
};
νλ‘νΌν°λ₯Ό λμ΄ ν λλ μΌνλ‘ κ΅¬λΆνλ€.
νλ‘νΌν° ν€μ κ°μΌλ‘ μ¬μ© ν μ μλ κ°μ μλμ κ°λ€.
- ν€ : λΉ λ¬Έμμ΄μ ν¬ν¨νλ λͺ¨λ λ¬Έμμ΄ λλ μ¬λ²κ°
- κ° : μλ°μ€ν¬λ¦½νΈμμ μ¬μ©ν μ μλ λͺ¨λ κ°
10.4 λ©μλ
μλ°μ€ν¬λ¦½νΈμ ν¨μλ κ°μ²΄(μΌκΈ κ°μ²΄) λΌμ κ°μΌλ‘ μ·¨κΈ ν μ μλ€.
- μ¦, ν¨μλ κ°μΌλ‘ μ·¨κΈ ν μ μκΈ° λλ¬Έμ νλ‘νΌν° κ° μΌλ‘ μ¬μ© ν μ μλ€.
- νλ‘νΌν° κ°μ΄ ν¨μμΌ κ²½μ° μΌλ° ν¨μμ ꡬλΆνκΈ° μν΄ λ©μλ λΌκ³ λΆλ₯Έλ€.
var circle = {
radius: 5, // ← νλ‘νΌν°
// μμ μ§λ¦
getDiameter: function () { // ← λ©μλ
return 2 * this.radius; // thisλ circleμ κ°λ¦¬ν¨λ€.
}
};
console.log(circle.getDiameter()); // 10
10.5 νλ‘νΌν° μ κ·Ό
- λ§μΉ¨ν : νλ‘νΌν° μ κ·Ό μ°μ°μ(.) λ₯Ό μ¬μ©νλ λ§μΉ¨ν νκΈ°λ²
- λκ΄νΈ : νλ‘νΌν° μ κ·Ό μ°μ°μ([...]) λ₯Ό μ¬μ©νλ λκ΄νΈ νκΈ°λ²
var person = {
name: 'april'
};
// λ§μΉ¨ν νκΈ°λ²μ μν νλ‘νΌν° μ κ·Ό
console.log(person.name); // april
// λκ΄νΈ νκΈ°λ²μ μν νλ‘νΌν° μ κ·Ό
console.log(person['name']); // april
// undefined λ°ν
console.log(person.age)
10.7 νλ‘νΌν° λμ μμ±
μ‘΄μ¬νμ§ μλ κ°μ νλ‘νΌν°μ ν λΉνλ©΄
- λμ μΌλ‘ μμ±λμ΄ μΆκ°λκ³ ,
- κ°μ΄ ν λΉλλ€.
var person = {
name: 'april'
};
// person κ°μ²΄μλ age νλ‘νΌν°κ° μ‘΄μ¬νμ§ μλλ€.
// λ°λΌμ person κ°μ²΄μ age νλ‘νΌν°κ° λμ μΌλ‘ μμ±λκ³ κ°μ΄ ν λΉλλ€.
person.age = 20;
console.log(person); // {name: "april", age: 20}
10.8 νλ‘νΌν° μμ
delete μ°μ°μλ κ°μ²΄μ νλ‘νΌν° κ°μ μμ νλ€.
var person = {
name: 'april'
};
// νλ‘νΌν° λμ μμ±
person.age = 20;
// person κ°μ²΄μ age νλ‘νΌν°κ° μ‘΄μ¬νλ€.
// λ°λΌμ delete μ°μ°μλ‘ age νλ‘νΌν°λ₯Ό μμ ν μ μλ€.
delete person.age;
// person κ°μ²΄μ address νλ‘νΌν°κ° μ‘΄μ¬νμ§ μλλ€.
// λ°λΌμ delete μ°μ°μλ‘ address νλ‘νΌν°λ₯Ό μμ ν μ μλ€. μ΄λ μλ¬κ° λ°μνμ§ μλλ€.
delete person.address;
console.log(person); // {name: "april"}
10.9 ES6μμ μΆκ°λ κ°μ²΄ 리ν°λ΄μ νμ₯ κΈ°λ₯
10.9.1 νλ‘νΌν°μ μΆμ½ νν
κ°μ²΄ 리ν°λ΄μ νλ‘νΌν°λ ν€μ κ°μΌλ‘ ꡬμ±λλ€.
- νλ‘νΌν° κ°μ λ³μμ ν λΉλ κ°, μλ³μ ννμμΌ μλ μλ€.
ES6μμλ νλ‘νΌν° κ°μΌλ‘ λ³μλ₯Ό μ¬μ©νλ κ²½μ° λ³μ μ΄λ¦κ³Ό νλ‘νΌν° ν€κ° λμΌν μ΄λ¦μΌ λ νλ‘νΌν° ν€λ₯Ό μλ΅ ν μ μλ€.
// ES5
var x = 1, y = 2;
var obj = {
x: x,
y: y
};
console.log(obj); // {x: 1, y: 2}
// ES6
let x = 1, y = 2;
// νλ‘νΌν° μΆμ½ νν
const obj = { x, y };
console.log(obj); // {x: 1, y: 2}
10.9.2 κ³μ°λ νλ‘νΌν° μ΄λ¦
λ¬Έμμ΄ λλ λ¬Έμμ΄λ‘ νμ
λ³ν ν μ μλ κ° μΌλ‘ νκ°λλ ννμμ ν΅ν΄
νλ‘νΌν° ν€λ₯Ό λμ μΌλ‘ μμ± ν μ μλ€.
- λ¨, νλ‘νΌν° ν€λ‘ μ¬μ©ν ννμμ λκ΄νΈ([...])λ‘ λ¬Άμ΄μΌ νλ€.
- μ΄λ₯Ό κ³μ°λ νλ‘νΌν° μ΄λ¦λΌκ³ νλ€.
// ES5
var prefix = 'prop';
var i = 0;
var obj = {};
// κ³μ°λ νλ‘νΌν° μ΄λ¦μΌλ‘ νλ‘νΌν° ν€ λμ μμ±
obj[prefix + '-' + ++i] = i;
obj[prefix + '-' + ++i] = i;
obj[prefix + '-' + ++i] = i;
console.log(obj); // {prop-1: 1, prop-2: 2, prop-3: 3}
// ES6
const prefix = 'prop';
let i = 0;
// κ°μ²΄ 리ν°λ΄ λ΄λΆμμ κ³μ°λ νλ‘νΌν° μ΄λ¦μΌλ‘ νλ‘νΌν° ν€ λμ μμ±
const obj = {
[`${prefix}-${++i}`]: i,
[`${prefix}-${++i}`]: i,
[`${prefix}-${++i}`]: i
};
console.log(obj); // {prop-1: 1, prop-2: 2, prop-3: 3}
10.9.3 λ©μλ μΆμ½ νν
λ©μλλ₯Ό μ μ ν λ function ν€μλλ₯Ό μλ΅ ν μΆμ½ ννμ μ¬μ©ν μ μλ€.
// ES5
var obj = {
name: 'april',
sayHi: function() {
console.log('Hi! ' + this.name);
}
};
obj.sayHi(); // Hi! april
// ES6
const obj = {
name: 'april',
// λ©μλ μΆμ½ νν
sayHi() {
console.log('Hi! ' + this.name);
}
};
obj.sayHi(); // Hi! april
'π Book-Talk > λͺ¨λ JS Deep Dive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_ν¨μ (0) | 2022.11.11 |
---|---|
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_μμ κ°κ³Ό κ°μ²΄μ λΉκ΅ (0) | 2022.11.11 |
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_νμ λ³ν (0) | 2022.11.11 |
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_μ μ΄λ¬Έ (0) | 2022.11.10 |
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive_μ°μ°μ (0) | 2022.11.10 |