์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ ์ค์ ์์ ๊ฐ์ ์ ์ธํ ๋๋จธ์ง ๊ฐ(ํจ์, ๋ฐฐ์ด, ์ ๊ท ํํ์ ๋ฑ)์ ๋ชจ๋ ๊ฐ์ฒด๋ค.
๊ฐ์ฒด๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ(mutable value)์ด๋ค.
๊ฐ์ฒด๋ 0๊ฐ ์ด์์ ํ๋กํผํฐ์ ๋ฉ์๋๋ก ๊ตฌ์ฑ๋ ์งํฉ์ด๋ฉฐ, ํ๋กํผํฐ๋ ํค(key)์ ๊ฐ(value)์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- ํ๋กํผํฐ: ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฐ(data)
- ๋ฉ์๋: ํ๋กํผํฐ(์ํ ๋ฐ์ดํฐ)๋ฅผ ์ฐธ์กฐํ๊ณ ์กฐ์ํ ์ ์๋ ๋์(behavior)
์ด์ฒ๋ผ ๊ฐ์ฒด๋ ์ํ์ ๋์์ ํ๋์ ๋จ์๋ก ๊ตฌ์กฐํํ ์ ์์ด ์ ์ฉํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ํ๋กํ ํ์ ๊ธฐ๋ฐ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ก์ ๋ค์ํ ๊ฐ์ฒด ์์ฑ ๋ฐฉ๋ฒ์ ์ง์ํ๋ค.
- ๊ฐ์ฒด ๋ฆฌํฐ๋ด
- Object ์์ฑ์ ํจ์
- ์์ฑ์ ํจ์
- Object.create ๋ฉ์๋
- ํด๋์ค(ES6)
๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ค๊ดํธ({...}) ๋ด์ 0๊ฐ ์ด์์ ํ๋กํผํฐ๋ฅผ ์ ์ํ๋ค.
๋ณ์์ ํ ๋น๋๋ ์์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ํด์ํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
var person = {
name: 'Lee',
sayHello: function () {
console.log(`Hello! My name is ${this.name}`);
}
};
console.log(typeof person); // object
console.log(person); // {name: "Lee", sayHello: f}
๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ค๊ดํธ๋ ์ฝ๋ ๋ธ๋ก์ ์๋ฏธํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ซ๋ ์ค๊ดํธ ๋ค์ ์ธ๋ฏธ์ฝ๋ก ์ ๋ถ์ฌ์ผ ํ๋ค.
๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ํ๋กํผํฐ๋ฅผ ํฌํจ์์ผ ๊ฐ์ฒด๋ฅผ ์์ฑํจ๊ณผ ๋์์ ํ๋กํผํฐ๋ฅผ ๋ง๋ค ์๋ ์๊ณ , ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ดํ์ ํ๋กํผํฐ๋ฅผ ๋์ ์ผ๋ก ์ถ๊ฐํ ์๋ ์๋ค.
๊ฐ์ฒด๋ ํ๋กํผํฐ์ ์งํฉ์ด๋ฉฐ, ํ๋กํผํฐ๋ ํค์ ๊ฐ์ผ๋ก ๊ตฌ๋ถ๋๋ค.
- ํ๋กํผํฐ ํค: ๋น ๋ฌธ์์ด์ ํฌํจํ๋ ๋ชจ๋ ๋ฌธ์์ด ๋๋ ์ฌ๋ฒ ๊ฐ, ์๋ณ์ ์ญํ
- ํ๋กํผํฐ ๊ฐ: ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ๊ฐ
var person = {
name: 'Lee' // ํ๋กํผํฐ ํค๋ name, ํ๋กํผํฐ ๊ฐ์ 'Lee';
}
key๋ ๋ฐ๋์ ์๋ณ์ ๋ค์ด๋ฐ ๊ท์น์ ๋ฐ๋ฅด์ง ์์๋ ๋์ง๋ง ๋ฐ๋ฅด์ง ์์ ๋๋ ๋ฐ๋์ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
๋ฌธ์์ด ๋๋ ๋ฌธ์์ด๋ก ํ๊ฐํ ์ ์๋ ํํ์์ ์ฌ์ฉํด ํ๋กํผํฐ ํค๋ฅผ ๋์ ์ผ๋ก ์์ํ ์๋ ์๋ค.
ํ๋กํผํฐ ํค๋ก ์ฌ์ฉํ ํํ์์ ๋๊ดํธ([...])๋ก ๋ฌถ์ด์ผ ํ๋ค.
var obj = {};
var key = 'hello';
obj[key] = 'world';
console.log(obj); // {hello: "world"}
๋น ๋ฌธ์์ด, ์์ฝ์ด๋ฅผ ํ๋กํผํฐ ํค๋ก ์ฌ์ฉํด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฏ๋ก ๊ถ์ฅํ์ง ์๋๋ค.
ํ๋กํผํฐ ํค์ ๋ฌธ์์ด์ด๋ ์ฌ๋ฒ ๊ฐ ์ธ์ ๊ฐ์ ์ฌ์ฉํ๋ฉด ์๋ฌต์ ํ์ ๋ณํ์ ํตํด ๋ฌธ์์ด์ด ๋๋ค.
์ด๋ฏธ ์กด์ฌํ๋ ํ๋กํผํฐ ํค๋ฅผ ์ค๋ณต ์ ์ธํ๋ฉด ๋์ค์ ์ ์ธํ ํ๋กํผํฐ๊ฐ ๋จผ์ ์ ์ธํ ํ๋กํผํฐ๋ฅผ ๋ฎ์ด์ด๋ค.
var foo = {
name: 'Lee',
name: 'Kim'
};
console.log(foo); // {name: "Kim"}
ํจ์๋ ๊ฐ์ฒด๋ก์ ๊ฐ์ผ๋ก ์ทจ๊ธํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋กํผํฐ ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
์ด๋, ํ๋กํผํฐ ๊ฐ์ด ํจ์์ผ ๊ฒฝ์ฐ ์ผ๋ฐ ํจ์์ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋ฉ์๋๋ผ ๋ถ๋ฅธ๋ค.
var circle = {
radius: 5,
// ๋ฉ์๋
getDiameter: function () {
return 2 * this.radius;
}
};
console.log(circle.getDiameter()); // 10
์ ๊ทผ ๋ฐฉ๋ฒ
- ๋ง์นจํ ํ๋กํผํฐ ์ ๊ทผ ์ฐ์ฐ์
.๋ฅผ ์ฌ์ฉํ๋ ๋ง์นจํ ํ๊ธฐ๋ฒ - ๋๊ดํธ ํ๋กํผํฐ ์ ๊ทผ ์ฐ์ฐ์
[...]๋ฅผ ์ฌ์ฉํ๋ ๋๊ดํธ ํ๊ธฐ๋ฒ
๋ ์ฐ์ฐ์์ ์ฐ์ธก ๋๋ ๋ด๋ถ์๋ ํ๋กํผํฐ ํค๋ฅผ ์ง์ ํ๋ค.
var person = {
name: 'Lee'
};
console.log(person.name); // Lee
console.log(person['name']); // Lee
๋๊ดํธ ํ๋กํผํฐ ์ ๊ทผ ์ฐ์ฐ์ ๋ด๋ถ์ ์ง์ ํ๋ ํ๋กํผํฐ ํค๋ ๋ฐ๋์ ๋ฐ์ดํ๋ก ๊ฐ์ผ ๋ฌธ์์ด์ด์ด์ผ ํ๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ๋๊ดํธ ๋ด๋ถ์ ๊ฐ์ ์๋ณ์๋ก ํด์ํด ReferenceError๊ฐ ๋ฐ์ํ๋ค.
๊ฐ์ฒด์ ์กด์ฌํ์ง ์๋ ํ๋กํผํฐ์ ์ ๊ทผํ๋ฉด undefined๋ฅผ ๋ฐํํ๋ค.
์ด๋ฏธ ์กด์ฌํ๋ ํ๋กํผํฐ์ ๊ฐ์ ํ ๋นํ๋ฉด value๊ฐ ๊ฐฑ์ ๋๋ค.
var person = {
name: 'Lee'
};
// person ๊ฐ์ฒด์ ์ด๋ฏธ ์กด์ฌํ๋ name ํ๋กํผํฐ์ ๊ฐ์ด ๊ฐฑ์ ๋๋ค.
person.name = 'Kim';
console.log(person); // {name: "Kim"}
์กด์ฌํ์ง ์๋ ํ๋กํผํฐ์ ๊ฐ์ ํ ๋นํ๋ฉด ํ๋กํผํฐ๊ฐ ๋์ ์ผ๋ก ์์ฑ๋์ด ์ถ๊ฐ๋๊ณ ํ๋กํผํฐ ๊ฐ์ด ํ ๋น๋๋ค.
var person = {
name: 'Lee'
};
person.age = 20;
console.log(person); // {name: "Lee", age: 20}
delete ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ญ์ ํ๋ค.
delete ์ฐ์ฐ์์ ํผ์ฐ์ฐ์๋ ํ๋กํผํฐ ๊ฐ์ ์ ๊ทผํ ์ ์๋ ํํ์์ด์ด์ผ ํ๋ค.
์กด์ฌํ์ง ์๋ ํ๋กํผํฐ๋ฅผ ์ญ์ ํ ๊ฒฝ์ฐ ๋ฌด์
var person = {
name: 'Lee',
age: 20
};
delete person.age;
console.log(person); // {name: "Lee"}
ํ๋กํผํฐ ๊ฐ์ผ๋ก ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ณ์ ์ด๋ฆ๊ณผ ํ๋กํผํฐ ํค๊ฐ ๋์ผํ ์ด๋ฆ์ผ ๋ ํ๋กํผํฐ ํค๋ฅผ ์๋ต(property shorthand) ๊ฐ๋ฅํ๋ค.
ํ๋กํผํฐ ํค๋ ๋ณ์ ์ด๋ฆ์ผ๋ก ์๋ ์์ฑ๋๋ค.
let x = 1, y = 2;
const obj = { x, y };
console.log(obj); // {x: 1, y: 2};
๋ฌธ์์ด ๋๋ ๋ฌธ์์ด๋ก ํ์ ๋ณํํ ์ ์๋ ๊ฐ์ผ๋ก ํ๊ฐ๋๋ ํํ์์ ๋๊ดํธ([...])๋ก ๋ฌถ์ด ํ๋กํผํฐ ํค๋ฅผ ๋์ ์ผ๋ก ์์ฑํ ์ ์๋ค.
ES5์์๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ์ธ๋ถ์์ ๋๊ดํธ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํด์ผ ํ๋ค.
ES6์์๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ด๋ถ์์๋ ๊ณ์ฐ๋ ํ๋กํผํฐ ์ด๋ฆ์ผ๋ก ํ๋กํผํฐ ํค๋ฅผ ๋์ ์์ฑํ ์ ์๋ค.
// 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}
๋ฉ์๋๋ฅผ ์ ์ํ ๋ function ํค์๋๋ฅผ ์๋ตํ ์ถ์ฝ ํํ์ ์ฌ์ฉํ ์ ์๋ค.
const obj = {
name: 'Lee',
sayHi() {
console.log('Hi! ' + this.name);
}
};
obj.sayHi(); // Hi! Lee
๋ฉ์๋ ์ถ์ฝ ํํ์ผ๋ก ์ ์ํ ๋ฉ์๋๋ ํ๋กํผํฐ์ ํ ๋นํ ํจ์์ ๋ค๋ฅด๊ฒ ์๋ํ๋ค.