๐Ÿ’โ€โ™€๏ธ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ์ฒด(Object)๋ž€,
ํ‚ค(key)๊ณผ ๊ฐ’(value)์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœํผํ‹ฐ(Property)๋“ค์˜ ์ง‘ํ•ฉ.

  • ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด์ด๋ฏ€๋กœ ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰ ๊ฐ€๋Šฅ

๐Ÿ‘€ ๊ฐ์ฒด(object)

1) ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ์ƒ์„ฑ

var ๊ฐ์ฒด๋ช… = {};

var student = {
    // ํ”„๋กœํผํ‹ฐ(์†์„ฑ) : ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’(data)์œผ๋กœ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๊ตฌ์„ฑ
    name : '์œ ๊ด€์ˆœ',
    age : 16,
    // ๋ฉ”์†Œ๋“œ : ํ”„๋กœํผํ‹ฐ(์ƒํƒœ ๋ฐ์ดํ„ฐ)๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘(behavior)
    getinfo : function() {
        return `${this.name}(์€)๋Š” ${this.age}์„ธ ์ž…๋‹ˆ๋‹ค.`
    }
};

console.log(typeof student); // object
console.log(student); 

var student2 = {}; // ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์„ ์‹œ ๋นˆ ๊ฐ์ฒด ์ƒ์„ฑ 
console.log(typeof student2);
console.log(student2); // {} ์ถœ๋ ฅ

๐Ÿ‘€ ํ”„๋กœํผํ‹ฐ(property)

๐Ÿ’โ€โ™€๏ธ ํ”„๋กœํผํ‹ฐ(property)๋ž€,
๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’(data)์œผ๋กœ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๊ตฌ์„ฑ


๐Ÿ’โ€โ™€๏ธ ํ”„๋กœํผํ‹ฐ ํ‚ค(property key)๋ž€,
๋นˆ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด ๋˜๋Š” ์‹ฌ๋ณผ ๊ฐ’

  • ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์‹๋ณ„์ž ๋„ค์ด๋ฐ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋จ
  • ์‹๋ณ„์ž ๋„ค์ด๋ฐ ๊ทœ์น™์„ ๋”ฐ๋ฅด์ง€ ์•Š์„ ๋•Œ๋Š” ๋”ฐ์˜ดํ‘œ๋ฅผ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉ (ํ•˜์ง€๋งŒ ๊ทœ์น™์„ ๋”ฐ๋ฅผ ๊ฒƒ์„ ๊ถŒ์žฅ)
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’์ด ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๋  ์ˆ˜ ์žˆ์Œ

1) ํ”„๋กœํผํ‹ฐ ์ƒ์„ฑ

var obj = {
    normal : 'normal value', // normal์„ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์ง€ ์•Š์•„๋„ ์ž๋™์ ์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ์ธ์‹
    '@ s p a c e @' : 'space value', // ํŠน์ˆ˜๋ฌธ์ž๋‚˜ ๊ณต๋ฐฑ์ด ์žˆ์„ ๋•Œ๋Š” ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์ค˜์•ผํ•จ
    '' : '',        // ๋นˆ ๋ฌธ์ž์—ด ํ‚ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๊ถŒ์žฅ X
    0 : 1,          // ์ˆซ์ž ํ‚ค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜
    var : 'var',    // ์˜ˆ์•ฝ์–ด ํ‚ค๋Š” ์˜ค์œ ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๊ถŒ์žฅ X
    normal : 'new value' // ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ‚ค๋ฅผ ์ค‘๋ณต ์„ ์–ธํ•˜๋ฉด ํ›„์ž์˜ ํ”„๋กœํผํ‹ฐ๋กœ ๋ฎ์–ด์”€
};

console.log(obj);

2) ๋ฉ”์†Œ๋“œ

๐Ÿ’โ€โ™€๏ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ์˜ ๋ฉ”์†Œ๋“œ๋ž€,
๊ฐ์ฒด ๋‚ด๋ถ€์— ์ •์˜๋œ ํ•จ์ˆ˜

var dog = {
    name : '์น˜์ฆˆ',
    // function(food) {} : ๋ฉ”์†Œ๋“œ
    eat : function(food) {
        console.log(`${this.name}๋Š” ${food}๋ฅผ ์—„์ฒญ ์ข‹์•„ํ•ด์š”.`)
    }
};

dog.eat('๊ณ ๊ตฌ๋งˆ'); // ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ๋ฒ• ์ค‘ ํ•˜๋‚˜ (๋งˆ์นจํ‘œ ์ ‘๊ทผ๋ฒ•)

3) ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ๋ฒ•

var dog = {
    name : '์น˜์ฆˆ',
    // ๋ฉ”์†Œ๋“œ : ๊ฐ์ฒด ๋‚ด๋ถ€์— ์ •์˜๋œ ํ•จ์ˆ˜
    eat : function(food) {
        console.log(`${this.name}๋Š” ${food}๋ฅผ ์—„์ฒญ ์ข‹์•„ํ•ด์š”.`)
    }
};

[1] ๋งˆ์นจํ‘œ ํ‘œ๊ธฐ๋ฒ•(dot notation)

๊ฐ์ฒด๋ช….ํ”„๋กœํผํ‹ฐํ‚ค(์ธ์ž)

console.log(dog.name);
dog.eat('๊ผฌ๊ตฌ๋ฏธ');

[2] ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•(square bracket notation)

๊ฐ์ฒด๋ช…['ํ”„๋กœํผํ‹ฐํ‚ค'](์ธ์ž)

console.log(dog['name']); // ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋ฐ˜๋“œ์‹œ '๋ฌธ์ž์—ด'๋กœ ์‚ฝ์ž…
dog['eat']('๋‹ญ๋ง๋žญ์ด');

[3] ๋งˆ์นจํ‘œ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ

var obj = {
    'dash-key' : 'dash-value',
    0 : 1
};
โ—ผ ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ ์‹๋ณ„์ž ๋„ค์ด๋ฐ ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š๋Š” ์ด๋ฆ„์ผ ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉ
// console.log(obj.dash-key);   // ์—๋Ÿฌ
// console.log(obj.'dash-key'); // ์ปดํŒŒ์ผ ์—๋Ÿฌ
// console.log(obj[dash-key]);  // ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ค์–ด์•ผํ•จ
console.log(obj['dash-key']); 	// ์ •์ƒ ์ž‘๋™ !
โ—ผ ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•์—์„œ ๋”ฐ์˜ดํ‘œ ์ƒ๋žต ๊ฐ€๋Šฅ
// console.log(obj.0);
// console.log(obj.'0');
console.log(obj[0]);  	// ์ˆซ์ž์ผ ๋•Œ๋Š” ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ์ง€ ์•Š์•„๋„ ์ •์ƒ์ž‘๋™
console.log(obj['0']);	// ์ •์ƒ์ž‘๋™

3) ํ”„๋กœํผํ‹ฐ ๋ณ€๊ฒฝ, ์ถ”๊ฐ€, ์‚ญ์ œ

var dog = {
    name : '์น˜์ฆˆ'
};

[1] ํ”„๋กœํผํ‹ฐ ๊ฐ’ ๋ณ€๊ฒฝ

์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๊ฐฑ์‹ 

dog.name = '๊ผฌ์ˆœ';
dog['name'] = '์ธ์ ˆ๋ฏธ' // ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
console.log(dog.name);

[2] ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€

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

dog.age = 2;
dog['age'] = 2; // ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
console.log(dog); // { name: '์ธ์ ˆ๋ฏธ', age: 2 } ์ถœ๋ ฅ

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

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

delete dog.age;
delete dog['age']; // ์ด๋ฏธ ์‚ญ์ œ๋œ age๋ฅผ ํ•œ๋ฒˆ ๋” ์‚ญ์ œํ•ด๋„ ์—๋Ÿฌ์—†์ด ๋ฌด์‹œ
console.log(dog); // { name: '์ธ์ ˆ๋ฏธ' } ์ถœ๋ ฅ

๐Ÿ‘€ ES6 ์ถ”๊ฐ€ ๋ฌธ๋ฒ• ๐Ÿ”ฅ์ค‘์š”๐Ÿ”ฅ

1) ํ”„๋กœํผํ‹ฐ ๊ฐ’ ๋‹จ์ถ• ๊ตฌ๋ฌธ

var id = 'p-00001';
var price = 30000;

var product = {
    id : id,
    price : price
};

console.log(product);

๐Ÿ’โ€โ™€๏ธ ES6์—์„œ๋Š” ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ๋ณ€์ˆ˜ ์ด๋ฆ„๊ณผ ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ ๋™์ผํ•œ ์ด๋ฆ„์ด๋ฉด ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ์ƒ๋žต ๊ฐ€๋Šฅ ๐Ÿ”ฅ์ค‘์š”๐Ÿ”ฅ

var product2 = { id, price }; // ํ”„๋กœํผํ‹ฐ ํ‚ค๋Š” ๋ณ€์ˆ˜ ์ด๋ฆ„์œผ๋กœ ์ž๋™ ์ƒ์„ฑ
console.log(product2);

2) ๊ณ„์‚ฐ ๋œ ํ”„๋กœํผํ‹ฐ๋ช…

var prefix = 'key';
var index = 0;
var obj = {};

[1] [ES5] ๋น„์–ด์žˆ๋Š” ๊ฐ์ฒด์— ์™ธ๋ถ€์—์„œ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€

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


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

console.log(obj);

[2] [ES6] ๋‚ด๋ถ€์—์„œ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€

ES6์—์„œ๋Š” ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋‚ด๋ถ€์—์„œ๋„ ๊ณ„์‚ฐ๋œ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„์œผ๋กœ ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋™์  ์ƒ์„ฑ ๊ฐ€๋Šฅ

var obj2 = {
    [`${prefix}-${index++}`] : index,
    [`${prefix}-${index++}`] : index,
    [`${prefix}-${index++}`] : index
};

console.log(obj2);

3) ๋ฉ”์†Œ๋“œ ๋‹จ์ถ•

[1] [ES5] ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ• ๋‹น

ES5์—์„œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๋ ค๋ฉด ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ• ๋‹น

var dog = {
    name : '์น˜์ฆˆ',
    eat : function(food) {
        console.log(`${this.name}๋Š” ${food}๋ฅผ ์—„์ฒญ ์ข‹์•„ํ•ด์š”.`);
    }
};

dog.eat('๊ณ ๊ตฌ๋งˆ');

[2] [ES6] function ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•œ ์ถ•์•ฝ ํ‘œํ˜„์„ ์‚ฌ์šฉ

ES6์—์„œ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ function ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•œ ์ถ•์•ฝ ํ‘œํ˜„์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

var dog2 = {
    name : '์น˜์ฆˆ',
    eat (food) { // ': function' ์ƒ๋žต
        console.log(`${this.name}๋Š” ${food}๋ฅผ ์—„์ฒญ ์ข‹์•„ํ•ด์š”.`);
    }
};

dog2.eat('๊ณ ๊ตฌ๋งˆ');

๐Ÿ‘€ in & for-in

1) in ์—ฐ์‚ฐ์ž

in : ํ”„๋กœํผํ‹ฐ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ

var student = {
    name : '์œ ๊ด€์ˆœ',
    age : 16,
    test : undefined
};

[1] ์ผ์น˜ ๋น„๊ต ์—ฐ์‚ฐ์ž๋กœ ํŒ๋‹จ

ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด undefined์ผ ๋ฟ ํ”„๋กœํผํ‹ฐ๋Š” ์กด์žฌํ•˜์ง€๋งŒ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋ณ„๋  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ

console.log(student.name === undefined);    // false : ์กด์žฌํ•จ์„ ์˜๋ฏธ
console.log(student.height === undefined);  // true : ์กด์žฌํ•˜์ง€์•Š์Œ์„ ์˜๋ฏธ
console.log(student.test === undefined);    // true

[2] in ์—ฐ์‚ฐ์ž๋กœ ํŒ๋‹จ

console.log("name" in student);     // true
console.log("height" in student);   // false
console.log("test" in student);     // true

2) for-in ๋ฐ˜๋ณต๋ฌธ

๐Ÿ’โ€โ™€๏ธ for-in ๋ฐ˜๋ณต๋ฌธ์ด๋ž€,
๊ฐ์ฒด์˜ ๋ชจ๋“  ํ‚ค๋ฅผ ์ˆœํšŒํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ˜๋ณต๋ฌธ

var student = {
    name : '์œ ๊ด€์ˆœ',
    age : 16,
    getInfo() {
        return `${this.name}์€ ${this.age}์„ธ ์ž…๋‹ˆ๋‹ค.`;
    }
};

console.log(student);

// key๊ฐ’์„ ์ˆœํšŒํ•˜๋ฉฐ ์ถœ๋ ฅ
for(var pk in student) {
    console.log(`key : ${pk}`);                     // ํ”„๋กœํผํ‹ฐ ํ‚ค ๊ฐ’
    console.log(`student[pk] : ${student[pk]}`);    // ํ”„๋กœํผํ‹ฐ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’
 // console.log(`student[pk] : ${student.pk}`);     // ๋งˆ์นจํ‘œ ํ‘œ๊ธฐ๋ฒ• ์‚ฌ์šฉ ๋ถˆ๊ฐ€ (student์•ˆ์— pk๋ผ๋Š” ๋ฆฌํ„ฐ๋Ÿด์„ ์ฐพ๋Š” ์˜๋ฏธ๊ฐ€ ๋จ)
    
    // key : value ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅํ•ด๋ณด๊ธฐ   
    console.log(`${pk} : ${student[pk]}`);
}

๐Ÿ‘€ object ์ƒ์„ฑ์ž ํ•จ์ˆ˜

๐Ÿ’โ€โ™€๏ธ object ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ž€,
new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜

1) ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€

// ๋นˆ ๊ฐ์ฒด ์ƒ์„ฑ
const student = new Object();

// ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€
student.name = '์œ ๊ด€์ˆœ';
student.age = 16;

console.log(student);

2) ์ƒ์„ฑ์ž ํ•จ์ˆ˜

๐Ÿ’โ€โ™€๏ธ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์ด์šฉํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹์€ ์ง๊ด€์ ์ด๊ณ  ๊ฐ„ํŽธํ•˜์ง€๋งŒ, ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋งŒ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๋™์ผ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋งค๋ฒˆ ๊ฐ™์€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ธฐ์ˆ ํ•˜๋ฏ€๋กœ ๋น„ํšจ์œจ์ 
๐Ÿ‘‰ ๋”ฐ๋ผ์„œ ๋™์ผ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑ ์‹œ, ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์‚ฌ์šฉ

[1] ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์˜ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ

// ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์ฒ˜๋Ÿผ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ ๊ตฌ์กฐ๊ฐ€ ๋™์ผํ•œ ๊ฐ์ฒด ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑ ๊ฐ€๋Šฅ
function Student(name, age) {
    // ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ this๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ด
    this.name = name;
    this.age = age;
    this.getInfo = function() {
        return `${this.name}์€ ${this.age}์„ธ ์ž…๋‹ˆ๋‹ค.`;
    }
}

// ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ
const student4 = new Student('๋ด‰๋ฏธ์„ ', 29);
const student5 = new Student('์‹ ํ˜•๋งŒ', 35);

console.log(student4);
console.log(student5);

[2] ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๊ณผ์ •

function Student(name, age) {
    
    // 1. ์•”๋ฌต์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  this์— ๋ฐ”์ธ๋”ฉ ๋˜๋Š” ๊ณผ์ •์ด ๋Ÿฐํƒ€์ž„ ์ด์ „์— ์‹คํ–‰
    console.log(this); // Student {} ์ถœ๋ ฅ

    // 2. this์— ๋ฐ”์ธ๋”ฉ ๋˜์–ด์žˆ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”
    this.name = name;
    this.age = age;
    this.getInfo = function() {
        return `${this.name}์€ ${this.age}์„ธ ์ž…๋‹ˆ๋‹ค.`;
    }
    // 3. ์™„์„ฑ ๋œ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ”์ธ๋”ฉ ๋œ this๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ๋ฐ˜ํ™˜
    // return {};
    // ๋งŒ์•ฝ ๋ช…์‹œ์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์•”๋ฌต์ ์ธ this ๋ฐ˜ํ™˜์ด ๋ฌด์‹œ
    // return 1; // this๋ฅผ ๋ฐ˜ํ™˜
    // ํ•˜์ง€๋งŒ ๋ช…์‹œ์ ์œผ๋กœ ์›์‹œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ฌด์‹œ๋˜๊ณ  this๊ฐ€ ๋ฐ˜ํ™˜
    // ์ƒ์„ฑ์ž ๋‚ด๋ถ€์—์„œ return์€ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ
}

const student = new Student('ํ™๊ธธ๋‘ฅ', 20);
console.log(student);

[3] ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€์˜ ์ฐจ์ด์ 

๐Ÿ’โ€โ™€๏ธ ์ฒซ ๋ฌธ์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ๊ธฐ์ˆ ํ•˜์—ฌ ๊ตฌ๋ณ„ํ•˜๋Š” ๊ฒƒ ์ด์™ธ, ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ํ˜•์‹์ ์ธ ์ฐจ์ด X

  • ๋‹จ, new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•  ๋•Œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ๋™์ž‘ํ•˜๋ฉฐ ๋งŒ์•ฝ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ๋™์ž‘
function Student(name, age) {

    this.name = name; // ์—ฌ๊ธฐ์„œ์˜ this๋“ค์€ ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ด
    this.age = age;
    this.getInfo = function() {
        return `${this.name}๋Š” ${this.age}์„ธ ์ž…๋‹ˆ๋‹ค.`;
    }
}
const student = Student('์‹ ์งฑ๊ตฌ', 5); // ์ผ๋ฐ˜ ํ•จ์ˆ˜
// ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋œ Student๋Š” ๋ฐ˜ํ™˜๋ฌธ์ด ์—†์œผ๋ฏ€๋กœ undefined๋ฅผ ๋ฐ˜ํ™˜
console.log(student); // undefined ์ถœ๋ ฅ (๋ฆฌํ„ด๊ตฌ๋ฌธ์ด ์—†๊ธฐ ๋•Œ๋ฌธ)
// ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋œ Student ๋‚ด์˜ this๋Š” ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ด
console.log(age);       // 5
console.log(name);      // ์‹ ์งฑ๊ตฌ
console.log(getInfo()); // ์‹ ์งฑ๊ตฌ๋Š” 5์„ธ ์ž…๋‹ˆ๋‹ค.

[4] new.target

๐Ÿ’โ€โ™€๏ธ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ new ์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

  • new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ์จ ํ˜ธ์ถœ๋˜๋ฉด ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ new.target์€ ํ•จ์ˆ˜ ์ž์‹ 
  • new ์—ฐ์‚ฐ์ž ์—†์ด ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ new.target์€ undefined
function Dog(name, age) {

    if(!new.target) {
        // new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ undefined์ด๋ฏ€๋กœ
        // new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€ ํ˜ธ์ถœํ•˜์—ฌ ์ƒ์„ฑ ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜
        return new Dog(name, age);
    }

    this.name = name;
    this.age = age;
}
// new ์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœํ•ด๋„ new.target์„ ํ†ตํ•ด ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ์จ ํ˜ธ์ถœ๋จ
const dog = Dog('์น˜์ฆˆ', 2);
console.log(dog);

๐Ÿ“Œ Ref.

* ๋Œ€๋ถ€๋ถ„์˜ ๋นŒํŠธ์ธ ์ƒ์„ฑ์ž ํ•จ์ˆ˜(Object, String, Number, Boolean, Date,, ...)๋Š” new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ํ›„ ์ ์ ˆํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜
* String, Number, Boolean์˜ ๊ฒฝ์šฐ new ์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœํ•˜๋ฉด ๊ฐ์ฒด ๊ฐ’์ด ์•„๋‹Œ ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ถˆ๋ฆฌ์–ธ ๊ฐ’(์›์‹œ ๊ฐ’)์„ ๋ฐ˜ํ™˜. '์ด๋ฅผ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€ํ™˜์— ํ™œ์šฉ'

profile
Tiny little habits make me

0๊ฐœ์˜ ๋Œ“๊ธ€