Skip to content

Latest commit

ย 

History

History
227 lines (152 loc) ยท 6.48 KB

File metadata and controls

227 lines (152 loc) ยท 6.48 KB

๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด

๊ฐ์ฒด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ ์ค‘์— ์›์‹œ ๊ฐ’์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๊ฐ’(ํ•จ์ˆ˜, ๋ฐฐ์—ด, ์ •๊ทœ ํ‘œํ˜„์‹ ๋“ฑ)์€ ๋ชจ๋‘ ๊ฐ์ฒด๋‹ค.

๊ฐ์ฒด๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’(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}

๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์˜ ์ค‘๊ด„ํ˜ธ๋Š” ์ฝ”๋“œ ๋ธ”๋ก์„ ์˜๋ฏธํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‹ซ๋Š” ์ค‘๊ด„ํ˜ธ ๋’ค์— ์„ธ๋ฏธ์ฝœ๋ก ์„ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค.

๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์— ํ”„๋กœํผํ‹ฐ๋ฅผ ํฌํ•จ์‹œ์ผœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•จ๊ณผ ๋™์‹œ์— ํ”„๋กœํผํ‹ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๊ณ , ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ์ดํ›„์— ํ”„๋กœํผํ‹ฐ๋ฅผ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

ํ”„๋กœํผํ‹ฐ (property)

๊ฐ์ฒด๋Š” ํ”„๋กœํผํ‹ฐ์˜ ์ง‘ํ•ฉ์ด๋ฉฐ, ํ”„๋กœํผํ‹ฐ๋Š” ํ‚ค์™€ ๊ฐ’์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

  • ํ”„๋กœํผํ‹ฐ ํ‚ค: ๋นˆ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด ๋˜๋Š” ์‹ฌ๋ฒŒ ๊ฐ’, ์‹๋ณ„์ž ์—ญํ• 
  • ํ”„๋กœํผํ‹ฐ ๊ฐ’: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’
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"}

๋ฉ”์„œ๋“œ (method)

ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด๋กœ์„œ ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋•Œ, ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ํ•จ์ˆ˜์ผ ๊ฒฝ์šฐ ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์„œ๋“œ๋ผ ๋ถ€๋ฅธ๋‹ค.

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};

๊ณ„์‚ฐ๋œ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„ (computed property name)

๋ฌธ์ž์—ด ๋˜๋Š” ๋ฌธ์ž์—ด๋กœ ํƒ€์ž… ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋˜๋Š” ํ‘œํ˜„์‹์„ ๋Œ€๊ด„ํ˜ธ([...])๋กœ ๋ฌถ์–ด ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

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

๋ฉ”์„œ๋“œ ์ถ•์•ฝ ํ‘œํ˜„์œผ๋กœ ์ •์˜ํ•œ ๋ฉ”์„œ๋“œ๋Š” ํ”„๋กœํผํ‹ฐ์— ํ• ๋‹นํ•œ ํ•จ์ˆ˜์™€ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.