๊ด€๋ฆฌ ๋ฉ”๋‰ด

Daehyunii's Dev-blog

10์žฅ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋ณธ๋ฌธ

๐Ÿ“š Language & CS knowledge/JavaScript (๋ชจ๋˜์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive)

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

Daehyunii 2022. 6. 29. 21:58

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

10.1 ๊ฐ์ฒด๋ž€?

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

'๊ฐ์ฒด = ํ”„๋กœํผํ‹ฐ(ํ‚ค+๊ฐ’) + ํ”„๋กœํผํ‹ฐ(ํ”„๋กœํผํ‹ฐ ํ‚ค + ํ”„๋กœํผํ‹ฐ ๊ฐ’) + ๋ฉ”์„œ๋“œ....' ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’์€ ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜๋„ ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰๋˜๋ฏ€๋กœ, ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ํ•จ์ˆ˜์ผ ๊ฒฝ์šฐ ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์„œ๋“œ๋ผ ๋ถ€๋ฅธ๋‹ค. ์ด์ฒ˜๋Ÿผ ๊ฐ์ฒด๋Š” ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ์ง‘ํ•ฉ์ฒด๋‹ค. 

 

โ˜†์ฐธ๊ณ 

ํ”„๋กœํผํ‹ฐ์˜ ์—ญํ•  : ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’(์ƒํƒœ ๋ฐ์ดํ„ฐ)

๋ฉ”์„œ๋“œ์˜ ์—ญํ•  : ์ƒํƒœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘

 

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

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

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

2) Object ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•œ ๊ฐ์ฒด ์ƒ์„ฑ

3) ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ†ตํ•œ ๊ฐ์ฒด ์ƒ์„ฑ

4) Object.create ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•œ ๊ฐ์ฒด ์ƒ์„ฑ

5) ํด๋ž˜์Šค๋ฅผ ํ†ตํ•œ ๊ฐ์ฒด ์ƒ์„ฑ

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

//๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ
    var person = {
    firstName : 'Dae', //ํ”„๋กœํผํ‹ฐ
    lastName :  'Woo', //ํ”„๋กœํผํ‹ฐ
    introduce : function () {
        console.log(`My name is ${person.firstName} ${person.lastName}.`);
    } //๋ฉ”์„œ๋“œ
};

console.log(typeof person); // ๋ฌธ์ž์—ด object ๋ฐ˜ํ™˜
console.log(person); // {firstName: 'Dae', lastName: 'Woo', introduce: ƒ}
console.log(person.introduce()); // My name is Dae Woo.

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

 

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

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

var person = {
    firstName : 'Dae',  // fistName ํ”„๋กœํผํ‹ฐ ํ‚ค : 'Dae' ํ”„๋กœํผํ‹ฐ ๊ฐ’
    lastName :  'Woo' // lastName ํ”„๋กœํผํ‹ฐ ํ‚ค : 'Woo' ํ”„๋กœํผํ‹ฐ ๊ฐ’
};
ํ”„๋กœํ”ผํ‹ฐ ํ‚ค์™€ ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’
ํ”„๋กœํผํ‹ฐ ํ‚ค ๋นˆ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•œ ๋ชจ๋“  ๋ฌธ์ž์—ด, sybol๊ฐ’
ํ”„๋กœํผํ‹ฐ ๊ฐ’ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ๊ฐ’(์›์‹œ ํƒ€์ž… ๊ฐ’, ํ•จ์ˆ˜, ๊ฐ์ฒด...)

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

var person = {
    firstName : 'Ung-mo', // ๋„ค์ด๋ฐ ๊ทœ์น™์„ ๋”ฐ๋ผ ๋ฌธ์ž์—ด ํ”„๋กœํผํ‹ฐ ํ‚ค ์ƒ์„ฑ
    'last-name' : 'Lee' // ๋„ค์ด๋ฐ ๊ทœ์น™์„ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  ๋ฌธ์ž์—ด ํ”„๋กœํผํ‹ฐ ํ‚ค ์ƒ์„ฑ
};
console.log(person); // {firstName: 'Ung-mo', last-name: 'Lee'}

var person = {
    firstName : 'Ung-mo', // ๋„ค์ด๋ฐ ๊ทœ์น™์„ ๋”ฐ๋ผ ๋ฌธ์ž์—ด ํ”„๋กœํผํ‹ฐ ํ‚ค ์ƒ์„ฑ
    last-name : 'Lee' // ๋„ค์ด๋ฐ ๊ทœ์น™์„ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  ๋”ฐ์˜ดํ‘œ๋„ ๋ถ™์ด์ง€ ์•Š์€ ๊ฒฝ์šฐ 
};
console.log(person); //SyntaxError(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ - ์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ๋Š” ํ‘œํ˜„์‹์œผ๋กœ ํ•ด์„ํ•จ)

 

โ€ป์ฐธ๊ณ (4.7 ์‹๋ณ„์ž ๋„ค์ด๋ฐ๊ทœ์น™)

2022.06.22 - [2022 Today I Learned/June. TIL] - [22์ผ-์ˆ˜์š”์ผ] ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive(2)

 

[22์ผ-์ˆ˜์š”์ผ] ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive(2)

04์žฅ ๋ณ€์ˆ˜ 4.1 ๋ณ€์ˆ˜๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ์™œ ํ•„์š”ํ•œ๊ฐ€? ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๊ฐœ๋…์ด๋‹ค. ์‚ฌ๋žŒ์€ ๋ชจ๋“  ๊ธฐ์–ต์„ ๋‘๋‡Œ์—์„œ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ปดํ“จํ„ฐ๋Š” ์—ฐ์‚ฐ๊ณผ ๊ธฐ์–ต์„ ์ˆ˜ํ–‰ํ•˜๋Š”

pinetree93.tistory.com

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

var obj = {}
var key = 'hello';

obj[key] = 'world'; //๋ฌธ์ž์—ด๋กœ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œํ˜„์‹์— [...]๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ ํ‚ค ๋™์  ์ƒ์„ฑ

console.log(obj); // {hello : 'world'}

ํ”„๋กœํผํ‹ฐ ํ‚ค์— ๋ฌธ์ž์—ด์ด๋‚˜ ์‹ฌ๋ฒŒ ๊ฐ’ ์™ธ์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜์„ ํ†ตํ•ด ๋ฌธ์ž์—ด์ด ๋œ๋‹ค. (๋„ค์ž„์ด ๊ทœ์น™์„ ์ง€ํ‚ค์ง€ ์•Š๊ณ  ๋ฌธ์ž์—ด์„ ๋ถ™์ด์ง€ ์•Š์€ ํ”„๋กœํผํ‹ฐ ํ‚ค ์ด๋ฆ„์€ Syntax Error๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ์  ์œ ์˜!)

var person = {
    0 : 'Ung-mo'
    };
console.log(person); // {0: 'Ung-mo'} // ํ”„๋กœํผํ‹ฐ ํ‚ค์ธ 0์€ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜๋˜์–ด ๋ฌธ์ž์—ด 0์œผ๋กœ ๋ฐ˜ํ™˜๋จ

์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ์ค‘๋ณต ์„ ์–ธํ•˜๋ฉด ๋‚˜์ค‘์— ์„ ์–ธํ•œ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋จผ์ € ์„ ์–ธํ•œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฎ์–ด์“ด๋‹ค. (์—๋Ÿฌ ๋ฐœ์ƒ ์—†์Œ)

var foo = {
    name : 'Son',
    name : 'sonny'
};
console.log(foo); // {name: 'sonny'}

//๋ฌธ์ž์—ด๋กœ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•ด ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•œ ๊ฒƒ
//๋™์ผํ•œ ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ ๋‚˜์ค‘์— ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•œ ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ ๋จผ์ € ์„ ์–ธํ•œ ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋ฎ์Œ
var capital = 'city';

var cities = {
    city : 'busan'
};
cities[capital] = 'seoul';
console.log(cities); // {city: 'seoul'}

10.4 ๋ฉ”์„œ๋“œ

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

 

10.5 ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ

ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ ์—ฐ์‚ฐ์ž ๋„ค์ด๋ฐ ๊ทœ์น™ ์ค€์ˆ˜ ํ”„๋กœํผํ‹ฐ ํ‚ค ๋„ค์ด๋ฐ ๊ทœ์น™ ๋ฏธ์ค€์ˆ˜ ํ”„๋กœํผํ‹ฐ ํ‚ค ์‚ฌ์šฉ์‹œ, ๋”ฐ์˜ดํ‘œ ์—ฌ๋ถ€
๋งˆ์นจํ‘œ ํ‘œ๊ธฐ๋ฒ• ( . ) ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์‚ฌ์šฉ ๋ถˆ๋Šฅ ๋ถˆํ•„์š”
๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ• ( [...] ) ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•„์š”(์˜ˆ์™ธ : ์ˆซ์ž์ธ ๋ฌธ์ž์—ด)
var person = {
    name : 'woo'
};

console.log(person.name); // woo(๋งˆ์นจํ‘œ ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ ์—ฐ์‚ฐ์ž)
console.log(person['name']); // woo(๋Œ€๊ด„ํ˜ธ ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ ์—ฐ์‚ฐ์ž)

โ€ป์ฃผ์˜์‚ฌํ•ญ

-๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ˆซ์ž๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋”ฐ์˜ดํ‘œ๋ฅผ ๋ถ™์—ฌ์ค˜์•ผ ํ•œ๋‹ค. ๋ถ™์ด์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์‹๋ณ„์ž๋กœ ํ•ด์„ํ•œ๋‹ค.

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

var person = {
    name : 'woo'
};

console.log(person.name); // woo
console.log(person.age); // undefined

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

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

var person = {
    name : 'woo'
};

person.name = 'Son'; //๋งˆ์นจํ‘œ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ”„๋กœํผํ‹ฐ ๊ฐฑ์‹ 
console.log(person.name); //Son

person['name'] = 'Park'; //๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•˜์—ฌ ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ”„๋กœํผํ‹ฐ ๊ฐฑ์‹ 
console.log(person.name); //Park

var first = 'name';
person[first] = 'Lee'; //๋ฌธ์ž์—ด๋กœ ํ‰๊ฐ€๋˜๋Š” ํ‘œํ˜„์‹์„ ์ž…๋ ฅํ•˜์—ฌ ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ”„๋กœํผํ‹ฐ ๊ฐฑ์‹ 
console.log(person.name); //Lee

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

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

//๋งˆ์นจํ‘œ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœํผํ‹ฐ ๋™์  ์ƒ์„ฑ
var person = {
    name : 'woo'
};

person.age = 30;
console.log(person.age); // ์ˆซ์ž ๊ฐ’ 30

//๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœํผํ‹ฐ ๋™์  ์ƒ์„ฑ
var person2 = {
    name : 'son'
};

person2['age'] = 31; //๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
console.log(person2.age); // ์ˆซ์ž ๊ฐ’ 31

var gender1 = 'gender';
person2[gender1] = '๋‚จ'; // ๋ฌธ์ž์—ด๋กœ ํ‰๊ฐ€๋˜๋Š” ํ‘œํ˜„์‹์„ ์ž…๋ ฅํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
console.log(person2.gender); //๋ฌธ์ž์—ด ๋‚จ

10.8 ํ”„๋กœํผํ‹ฐ ์‚ญ์ œ(delete ์—ฐ์‚ฐ์ž!!) 

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

 var person = {
    name : 'woo'
};

person.age = 30;
console.log(person.age); // 30

delete person.age;
console.log(person.age); // undefined

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

  ES6์—์„œ๋Š” ๋”์šฑ ๊ฐ„ํŽธํ•˜๊ณ  ํ‘œํ˜„๋ ฅ ์žˆ๋Š” ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์˜ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค

 

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

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

var x = 1;
var y = 2;

var num = {
    x, 
    y
};
console.log(num); // {x: 1, y: 2}

var num = {x,y}; 
console.log(num); // {x: 1, y: 2}

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

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

//ES5๋ฒ„์ „
var number = 'num';
var i = 0;

var obj = {};

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

console.log(obj); // {num-0: 1, num-1: 2, num-2: 3}

//ES6๋ฒ„์ „
var number = 'num';
var i = 0;

var obj = {
    [`${number}-${i++}`] : i, 
    [`${number}-${i++}`] : i, 
    [`${number}-${i++}`] : i 
};

console.log(obj); // {num-0: 1, num-1: 2, num-2: 3}

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

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