ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๊ฐ์ฒด๋ž€?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐœ์ฒด๊ธฐ๋ฐ˜์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ์›์‹œ ๊ฐ’์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฐ’์€ ๊ฐ์ฒดํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๊ฐ’์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๊ตฌ์„ฑํ•œ ๋ณตํ•ฉ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์›์‹œ ๊ฐ’๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค.

 

๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜์ž๋ฉด ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ์ง‘ํ•ฉ์ฒด์ž…๋‹ˆ๋‹ค.

  • ํ”„๋กœํผํ‹ฐ : ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’. key๊ณผ value๋กœ ๊ตฌ์„ฑ.
  • ๋ฉ”์„œ๋“œ : ํ”„๋กœํผํ‹ฐ(์ƒํƒœ ๋ฐ์ดํ„ฐ)๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘.
var counter = {
    num: 0,
    increase() {
        this.num++;
    }
};

์œ„์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ๊ฐ์ฒด๋Š” ์ƒํƒœ์™€ ๋™์ž‘์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๊ตฌ์กฐํ™” ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์— ์˜ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋กœ์„œ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ๋ฒ•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ์ฒด *๋ฆฌํ„ฐ๋Ÿด
  • Object ์ƒ์„ฑ์ž ํ•จ์ˆ˜
  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜
  • Object.create ๋ฉ”์„œ๋“œ
  • ํด๋ž˜์Šค(ES6)

*๋ฆฌํ„ฐ๋Ÿด : ์‚ฌ๋žŒ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž ๋˜๋Š” ์•ฝ์†๋œ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ์ƒ์„ฑํ•˜๋Š” ํ‘œ๊ธฐ๋ฒ•

 

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

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

  • ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ๋ฒ• ์ค‘ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์ค‘๊ด„ํ˜ธ({ ... }) ๋‚ด์— 0๊ฐœ ์ด์ƒ์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜
  • ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๋Š” ์‹œ์ ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ํ•ด์„ํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์œ ์—ฐํ•จ๊ณผ ๊ฐ•๋ ฅํ•จ์„ ๋Œ€ํ‘œํ•˜๋Š” ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹
var person = {
    name: 'Lee'
};

console.log(typeof(person)); // object
console.log(person); // {name: "Lee"}

** ๊ฐ์ฒด์˜ {}๋Š” if๋ฌธ ๊ฐ™์€ ์ œ์–ด๋ฌธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋ธ”๋ก์„ ์˜๋ฏธํ•˜์ง€ ์•Š๊ณ  ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋˜๋Š” ํ‘œํ˜„์‹์„ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์— {}๋’ค์—๋Š” ์„ธ๋ฏธ์ฝœ๋ก ์„ ๋ถ™์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœํผํ‹ฐ

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

 

ํ”„๋กœํผํ‹ฐ ๊ฐ’

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’

 

ํ”„๋กœํผํ‹ฐ ํ‚ค

  • ๋นˆ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด ๋˜๋Š” ์‹ฌ๋ฒŒ ๊ฐ’
  • ํ”„๋กœํผํ‹ฐ ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์œผ๋กœ์„œ ์‹๋ณ„์ž ์—ญํ• 
  • ์‹๋ณ„์ž ๋„ค์ด๋ฐ ๊ทœ์น™์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š” ์ด๋ฆ„์—๋Š” ๋ฐ˜๋“œ์‹œ ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉ
  • ๋ฌธ์ž์—ด ๋˜๋Š” ๋ฌธ์ž์—ด๋กœ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œํ˜„์„์„ ์‚ฌ์šฉํ•ด ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑ ๊ฐ€๋Šฅ ([ํ‘œํ˜„์‹])
  • ๋ฌธ์ž์—ด์ด๋‚˜ ์‹ฌ๋ฒŒ ๊ฐ’ ์ด์™ธ์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜์„ ํ†ตํ•ด ๋ฌธ์ž์—ด์ด ๋จ
  • ์˜ˆ์•ฝ์–ด๋ฅผ ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ์‚ฌ์šฉํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
  • ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ์ค‘๋ณต ์„ ์–ธํ•˜๋ฉด ๋‚˜์ค‘์— ์„ ์–ธํ•œ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋จผ์ € ์„ ์–ธํ•œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฎ์–ด์”€
var person = {
    lastName: 'Lee',
    'fist-name': 'Ung-mo', // ์‹๋ณ„์ž ๋„ค์ด๋ฐ ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š๋Š” ํ‚ค ์‚ฌ์šฉ
    age: 20,
    0: 1 // ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜์„ ํ†ตํ•ด key๊ฐ€ ๋ฌธ์ž์—ด "0"์ด ๋จ
};

์œ„์˜ ์ฝ”๋“œ์—์„œ "lastName", "fist-name", "age", "0"์€ ํ‚ค์ด๊ณ , "Lee", "Ung-mo", 20, 1์€ ๊ฐ’์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋‚˜์—ดํ•  ๋•Œ๋Š” ,๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

 

ํ”„๋กœํผํ‹ฐ ๋™์  ์ƒ์„ฑ

์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ์ถ”๊ฐ€๋˜๊ณ  ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

var person = {
    name: 'Lee'
};

person.age = 20;

console.log(person); // {name: "Lee", age: 20}

 

ํ”„๋กœํผํ‹ฐ ์‚ญ์ œ

delete์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var person = {
    name: 'Lee',
    age: 20
};

delete person.age;

console.log(person); // {name: "Lee"}

 

ES6์—์„œ ์ถ”๊ฐ€๋œ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์˜ ํ™•์žฅ ๊ธฐ๋Šฅ

ํ”„๋กœํ„ฐํ”ผ ์ถ•์•ฝ ํ‘œํ˜„

ํ”„๋กœํผํ‹ฐ ๊ฐ’์€ ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ๊ฐ’(์‹๋ณ„์ž ํ‘œํ˜„์‹)์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ, ES6์—์„œ๋Š” ๋ณ€์ˆ˜ ์ด๋ฆ„๊ณผ ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ ๋™์ผํ•œ ์ด๋ฆ„์ผ๋•Œ ํ‚ค๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ES5
var x1 = 1, y1 = 2;

var obj = {
    x: x,
    y: y
};

console.log(obj); // {x:1, y:2}

// ES6์˜ ํ”„๋กœํผํ‹ฐ ์ถ•์•ฝ ํ‘œํ˜„
let a = 1, b = 2;
const obj2 = {
    a,
    b
};

console.log(obj2); // {a:1, b:2}

 

๊ณ„์‚ฐ๋œ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„

ES5์—์„œ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ๋ฌธ์ž์—ด๋กœ ํƒ€์ž… ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋˜๋Š” ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ์™ธ๋ถ€์—์„œ ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ES6๋ถ€ํ„ฐ๋Š” ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋‚ด๋ถ€์—์„œ๋„ ๊ณ„์‚ฐ๋œ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„์œผ๋กœ ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋™์  ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ES5
var prefix = 'prop';
var i = 0;

var obj = {};

obj[prefix + '-' + ++i] = i;
obj[prefix + '-' + ++i] = i;

console.log(obj); // {prop-1: 1, prop-2: 2}

// ES6์˜ ๊ณ„์‚ฐ๋œ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„์œผ๋กœ ํ‚ค ๋™์  ์ƒ์„ฑ
const prefix = 'prop';
let i = 0;

const obj = {
    [`${prefix} + '-' + ${++i}`] = i;
    [`${prefix} + '-' + ${++i}`] = i;
};

console.log(obj); // {prop-1: 1, prop-2: 2}

 

๋ฉ”์„œ๋“œ ์ถ•์•ฝ ํ‘œํ˜„

ES5์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋ ค๋ฉด function ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ• ๋‹นํ–ˆ์œผ๋‚˜, ES6์—์„œ๋Š” function ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•œ ์ถ•์•ฝ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ES5
var obj = {
    name: 'Lee',
    sayHi: function() {
        console.log('Hi ' + this.name);
    }
};

obj.sayHi(); // Hi Lee

//ES6์˜ ์ถ•์•ฝ ํ‘œํ˜„
const obj = {
    name: 'Lee',
    sayHi() {
        console.log('Hi ' + this.name);
    }
};

obj.sayHi(); // Hi Lee

 

 

 

[์ถœ์ฒ˜] ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive

https://wikibook.co.kr/mjs/

 

๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋™์ž‘ ์›๋ฆฌ

269๊ฐœ์˜ ๊ทธ๋ฆผ๊ณผ ์›๋ฆฌ๋ฅผ ํŒŒํ—ค์น˜๋Š” ์„ค๋ช…์œผ๋กœ ‘์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋™์ž‘ ์›๋ฆฌ’๋ฅผ ์ดํ•ดํ•˜์ž! ์›นํŽ˜์ด์ง€์˜ ๋‹จ์ˆœํ•œ ๋ณด์กฐ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ œํ•œ์ ์ธ ์šฉ๋„๋กœ ํƒœ์–ด๋‚œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ณผ๋„

wikibook.co.kr