์ƒˆ์†Œ์‹

์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด

TL

21/09/11 TL. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด, ์›์‹œ ๊ฐ’๊ณผ ๊ฐ์ฒด์˜ ๋น„๊ต

  • -

๐Ÿ‰ ๊ฐ์ฒด๋ž€?

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

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

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

js์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’์€ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. js์˜ ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด์ด๋ฏ€๋กœ ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰ ๊ฐ€๋Šฅํ•˜๊ณ , ํ•จ์ˆ˜๋„ ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ํ•จ์ˆ˜์ผ ๊ฒฝ์šฐ, ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์„œ๋“œ๋ผ ๋ถ€๋ฅธ๋‹ค.

์ฆ‰, ๊ฐ์ฒด๋Š” ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ์ง‘ํ•ฉ์ฒด์ด๋‹ค. ์ด์ฒ˜๋Ÿผ ๊ฐ์ฒด๋Š” ์ƒํƒœ์™€ ๋™์ž‘์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์žˆ์–ด ์œ ์šฉํ•˜๋‹ค.

  • ํ”„๋กœํผํ‹ฐ : ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’
  • ๋ฉ”์„œ๋“œ : ํ”„๋กœํผํ‹ฐ(์ƒํƒœ ๋ฐ์ดํ„ฐ)๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘

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

C++๋‚˜ ์ž๋ฐ” ๊ฐ™์€ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์ „ ์ •์˜ํ•˜๊ณ  ํ•„์š”ํ•œ ์‹œ์ ์— new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

  • ์ธ์Šคํ„ด์Šค : ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์–ด ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š” ์ƒํƒœ์ด๋‹ค.

js๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋กœ์„œ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

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

๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ค‘๊ด„ํ˜ธ ๋‚ด์— 0๊ฐœ ์ด์ƒ์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•˜๋ฉด js ์—”์ง„์€ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ์‹œ์ ์— ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ํ•ด์„ํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

var person = {
	name: 'Kim',
	sayHello: function() {
		console.log(`Hello My name is ${this.name}`)
	}
};

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

๋งŒ์•ฝ ์ค‘๊ด„ํ˜ธ ๋‚ด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๋นˆ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

var empty = {};
console.log(typeof empty); // object

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

๐Ÿ‰ ํ”„๋กœํผํ‹ฐ

ํ”„๋กœํผํ‹ฐ ํ‚ค, ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ํ”„๋กœํผํ‹ฐ ํ‚ค : ๋นˆ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด ๋˜๋Š” ์‹ฌ๋ฒŒ ๊ฐ’
  • ํ”„๋กœํผํ‹ฐ ๊ฐ’ : js์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’

ํ”„๋กœํผํ‹ฐ ํ‚ค์—๋Š” ์‹๋ณ„์ž ๋„ค์ด๋ฐ ๊ทœ์น™์„ ์ง€ํ‚จ๋‹ค๋ฉด ''ํ˜น์€ ""๋กœ ๋ฌถ์„ ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ, ์•„๋‹ ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ๋ฌถ์–ด์•ผ ํ•œ๋‹ค.

var person = {
	firstName: 'Seokyung',
 // js๋Š” -๋ฅผ ์—ฐ์‚ฐ์ž๋กœ ์ธ์‹ํ•˜๋ฏ€๋กœ last-name์€ ์‹๋ณ„์ž ๋„ค์ด๋ฐ ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.
	'last-Name': 'Kim'
};

console.log(persone); // { firstName:"Seokyung", last-name: "Kim" }

var person = {
	firstName: 'Seokyung',
	last-Name: 'Kim' // Uncaught SyntaxError: Unexpected token '-'
};

ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ์‚ฌ์šฉํ•  ํ‘œํ˜„์‹์„ [] ๋กœ ๋ฌถ์–ด์•ผ ํ•œ๋‹ค.

var person = {
	firstName: 'Seokyung',
 // js๋Š” -๋ฅผ ์—ฐ์‚ฐ์ž๋กœ ์ธ์‹ํ•˜๋ฏ€๋กœ last-name์€ ์‹๋ณ„์ž ๋„ค์ด๋ฐ ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.
	'last-Name': 'Kim'
};

console.log(persone); // { firstName:"Seokyung", last-name: "Kim" }

var person = {
	firstName: 'Seokyung',
	last-Name: 'Kim' // Uncaught SyntaxError: Unexpected token '-'
};
  • ๋งŒ์•ฝ, ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ๋ฌธ์ž์—ด์ด๋‚˜ ์‹ฌ๋ฒŒ ๊ฐ’ ์™ธ์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜์„ ํ†ตํ•ด ๋ฌธ์ž์—ด์ด ๋œ๋‹ค.
  • var, function ๊ฐ™์€ ์˜ˆ์•ฝ์–ด๋ฅผ ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ์‚ฌ์šฉํ•ด๋„ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒํ•˜์ง„ ์•Š์ง€๋งŒ, ์˜ˆ์ƒ ๋ชปํ•œ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์—ฌ์ง€๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ์ค‘๋ณต ์„ ์–ธํ•˜๋ฉด ๋‚˜์ค‘์— ์„ ์–ธํ•œ ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ ๋จผ์ € ์„ ์–ธํ•œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฎ์–ด์“ด๋‹ค. ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ‰ ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ

ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • ๋งˆ์นจํ‘œ ํ‘œ๊ธฐ๋ฒ• : ์ ‘๊ทผ ์—ฐ์‚ฐ์ž .์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค.
  • ๋Œ€๊ด„ํšจ ํ‘œ๊ธฐ๋ฒ• : ์ ‘๊ทผ ์—ฐ์‚ฐ์ž []์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค.

ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•  ๋•Œ๋Š” ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋ฐ˜๋“œ์‹œ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‹๋ณ„์ž๋กœ ํ•ด์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ReferenceError๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

var person = {
	name: 'Kim'
};

consoel.log(person['name']); // Kim

console.log(person[name]); // ReferenceError: name is not defined
// Node์—์„œ๋Š” ReferenceError, ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” undefined์ด๋‹ค.

console.log(person.age) // undefined

์ถ”๊ฐ€๋กœ, ๊ฐ์ฒด์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๋ฉด undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ReferenceError๋ฅผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

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

delete ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ์•„๋ฌด๋Ÿฐ ์—๋Ÿฌ ์—†์ด ๋ฌด์‹œ๋œ๋‹ค.

var person = {
	name: 'Kim'
};

// ๋™์  ์ƒ์„ฑ
person.age = 20;

delete person.age;

delete person.address;

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

 

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

๐Ÿฅฅ ํ”„๋กœํผํ‹ฐ ์ถ•์•ฝ ํ‘œํ˜„

ES6์—์„œ๋Š” ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณ€์ˆ˜ ์ด๋ฆ„๊ณผ ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ ๋™์ผํ•œ ์ด๋ฆ„์ผ ๋•Œ, ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ํ”„๋กœํผํ‹ฐ ํ‚ค๋Š” ๋ณ€์ˆ˜ ์ด๋ฆ„์œผ๋กœ ์ž๋™ ์ƒ์„ฑ๋œ๋‹ค.

let x = 1, y = 2;

const obj = { x, y };

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

 

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

๋ฌธ์ž์—ด ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•ด ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ์‚ฌ์šฉํ•  ํ‘œํ˜„์‹์„ ๋Œ€๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ๊ณ„์‚ฐ๋œ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„์ด๋ผ ํ•œ๋‹ค.

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์—์„œ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ function ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•œ ์ถ•์•ฝ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ •์˜ํ•œ ๋ฉ”์„œ๋“œ๋Š” ํ”„๋กœํผํ‹ฐ์— ํ• ๋‹นํ•œ ํ•จ์ˆ˜์™€ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ํ›„์ˆ ํ•œ๋‹ค.

const obj = {
	name: 'Kim',
	sayHi() {
		console.log('Hi! ' + this.name);
	}
}

obj.sayHi(); // Hi! Kim

 

 

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.