TIL_29_with Wecode 019 JavaScript about Object

JIEUNยท2021๋…„ 2์›” 23์ผ
0
post-thumbnail

๐Ÿ‘ง Object (2)
๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํƒ€์ž…(ํ…์ŠคํŠธ, ์ˆซ์ž, ๋ฐฐ์—ด ๋“ฑ..)์ฒ˜๋Ÿผ ๋ณ€์ˆ˜์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. {} ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ์š”, ์ด๋ ‡๊ฒŒ {} ์œผ๋กœ ์ƒ๊ธด ๋ชจ์–‘์˜ ๊ฐ์ฒด๋ฅผ object literal(๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด) ์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
hello๋ผ๋Š” ๋ณ€์ˆ˜์— ๋นˆ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜์˜€์Šต๋‹ˆ๋‹ค.

let hello = {}; // {} ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด

์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.

let arr = ['๊ณ ์–‘์ด', '๊ท€์—ฌ์›Œ', '๋ฉ๋ฉ์ด', '์ข‹์•„'];

arr[0]์€ '๊ณ ์–‘์ด' ์ด๊ณ , arr[1]์€ '๊ท€์—ฌ์›Œ' ์ž…๋‹ˆ๋‹ค.
๊ฐ์ฒด๋Š” ํ‚ค(key)-๊ฐ’(value) ์Œ์œผ๋กœ๋œ ๋ฐ์ดํ„ฐ์˜ ๋ชจ์Œ์œผ๋กœ์จ ์ˆœ์„œ๊ฐ€ ๋’ค๋ฐ”๊ปด๋„ ์•„๋ฌด ์ƒ๊ด€์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ˆœ์„œ๋Œ€๋กœ index๋กœ ์ ‘๊ทผํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํ‚ค๋กœ ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
key๋Š” property name์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, value๋Š” property value๋ผ๊ณ ๋„ ๋งํ•ฉ๋‹ˆ๋‹ค.

ํ‚ค๋Š” ๋งˆ์น˜ ํŠน์ • ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ณ€์ˆ˜๊ฐ™์€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ‚ค๋กœ ํ”„๋กœํผํ‹ฐ์— ์–ด๋–ค ๊ฐ’์ด ์ €์žฅ๋˜์—ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‚ค์˜ ๊ฐ’์—๋Š” ํ…์ŠคํŠธ, ์ˆซ์ž ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜, ๊ฐ์ฒด๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let difficult = {
  'my name': 'boong',
  color: 'silver',
  ํ‚ค: 'ํ•œ๊ธ€์ธ ํ‚ค๋Š” ๋”ฐ์˜ดํ‘œ๊ฐ€ ์—†์–ด๋„ ๋˜๋Š”๊ตฐ!!',
  '!ํ‚ค': '๋А๋‚Œํ‘œ ์žˆ๋Š” ํ‚ค๋Š” ๋”ฐ์˜ดํ‘œ๊ฐ€ ํ•„์š”ํ•˜๊ตฐ',
  $special: '$๋Š” ์—†์–ด๋„ ๋˜๋Š”๊ตฐ'
};

๊ฐ์ฒด์˜ ํ‚ค์—๋Š” ์ŠคํŽ˜์ด์Šค, ํ•œ๊ธ€, ํŠน์ˆ˜๋ฌธ์ž ๋“ฑ์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜(variable) ์„ ์–ธํ•  ๋•Œ๋Š” ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. color์™€ ๊ฐ™์ด ํ‚ค์— ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ์—†์œผ๋ฉด ๋”ฐ์˜ดํ‘œ๋ฅผ ์ƒ๋žตํ•˜๊ณ  ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿคฒ ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ
์ ‘๊ทผ์€ dot(.)์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ, [] ๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฒ•์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  let difficult = {
  33: '์ˆซ์ž ํ˜•์‹๋„ ๋˜๋„ค',
  'my name': '์ŠคํŽ˜์ด์Šค ํฌํ•จ ๊ฐ€๋Šฅ',
  color: 'silver',
  ํ‚ค: 'ํ•œ๊ธ€์ธ ํ‚ค๋Š” ๋”ฐ์˜ดํ‘œ๊ฐ€ ์—†์–ด๋„ ๋˜๋Š”๊ตฐ!!',
  '!ํ‚ค': '๋А๋‚Œํ‘œ ์žˆ๋Š” ํ‚ค๋Š” ๋”ฐ์˜ดํ‘œ๊ฐ€ ํ•„์š”ํ•˜๊ตฐ',
  $special: '$๋Š” ์—†์–ด๋„ ๋˜๋Š”๊ตฐ'
};
console.log(difficult.color);

์‚ฌ์‹ค ํ‚ค๋งŒ ์•Œ๊ณ  ์žˆ์œผ๋ฉด dot(.)์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์ œ์ผ ํŽธํ•ฉ๋‹ˆ๋‹ค. dot(.)์€ ํ‚ค๋กœ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. dot์œผ๋กœ ์ ‘๊ทผํ•  ๋•Œ๋Š” ๋”ฐ์˜ดํ‘œ ์—†์ด ํ‚ค๋ฅผ ๋ฐ”๋กœ ์จ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ [] ๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผํ•  ์ˆ˜๋„ ์žˆ์—ˆ์ฃ !

console.log(difficult['color']); 

๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผํ•˜๋ ค๋ฉด ํ‚ค ์ด๋ฆ„์„ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์„œ ์ž‘์„ฑํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

console.log(difficult.my name);

์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ์ŠคํŽ˜์ด์Šค๊ฐ€ ํฌํ•จ๋œ ํ‚ค๋Š” ๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

console.log(difficult['my name']); // ์ด๋ ‡๊ฒŒ.
console.log(difficult.33);

์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ์ˆซ์ž๋กœ ๋œ ํ‚ค ๋˜ํ•œ ๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

console.log(difficult['33']); // ์ด๋ ‡๊ฒŒ.

์™ธ์šธ ํ•„์š”๋Š” ์Œ์Šด~
์˜ค๋ฅ˜ ๋œจ๋ฉด ๊ทธ ๋•Œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค! ์ด๋ ‡๊ฒŒ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ํ‚ค ์ด๋ฆ„์„ ์ง€์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ์•„์ฃผ์„ธ์š”.

๐Ÿคฒ ๋ณ€์ˆ˜๋กœ ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผํ•˜๊ธฐ

let name = 'ํ‚ค'; 
//์—ฌ๊ธฐ์„œ name ์€ key ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ณ€์ˆ˜๋กœ ์„ ์–ธ์„ ํ•ด์คฌ์„๋ฟ!
console.log(difficult[name]);

๋ณ€์ˆ˜์— ํ‚ค ์ด๋ฆ„์ด ์ €์žฅ๋˜์–ด์žˆ์œผ๋ฉด, ๋ณ€์ˆ˜๋กœ๋„ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ด๋•Œ dot(.) ๋‹ค์Œ์— ๋ณ€์ˆ˜๋ช…์„ ๋„ฃ์–ด์„œ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ• ๊นŒ์š”?
'name'์ด๋ผ๋Š” ํ‚ค๊ฐ€ ์žˆ์—ˆ์œผ๋ฉด ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ๊ฒ ์ง€๋งŒ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— undefined๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋กœ ์ ‘๊ทผํ•  ๋•Œ๋Š” ํ•ญ์ƒ ๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿคฒ ํ”„๋กœํผํ‹ฐ ํ• ๋‹น

difficult[name] = '๊ฐ’ ๋ฐ”๊พผ๋‹ค';
console.log(difficult[name]);
difficult.color = '์ƒ‰๊น”';
console.log(difficult.color);
console.log('์ƒ์„ฑ์ „: ' + difficult.new);
difficult.new = '์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ํ”„๋กœํผํ‹ฐ';
console.log('์ƒ์„ฑํ›„: ' + difficult.new);

๊ฐ์ฒด์— ์ด๋ฏธ ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ๋‹ค์‹œ ํ•œ ๋ฒˆ ํ• ๋‹นํ•˜๋ฉด ๊ฐ’์ด ๊ต์ฒด(์ˆ˜์ •)๋ฉ๋‹ˆ๋‹ค.
์ด์ „์— ์—†๋˜ ํ‚ค๋กœ ์ ‘๊ทผํ•˜๋ฉด, ์ƒˆ๋กœ์šด ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ถ”๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
์•„์ง ์—†๋˜ ํ‚ค์— ์ ‘๊ทผํ•˜๋ฉด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ค€๋น„๋Š” ๋˜์–ด์žˆ์ง€๋งŒ, ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค.

console.log(difficult.newProperty);

์•„์ง difficult ๋ผ๋Š” ๊ฐ์ฒด์— newProperty ํ”„๋กœํผํ‹ฐ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— undefined์ž…๋‹ˆ๋‹ค.

difficult.realNewProperty = '์ถ”๊ฐ€ ๋๋‹ค';

์œ„์˜ ์˜ˆ์‹œ๋Š” ์—†์—ˆ๋˜ ํ‚ค์— ๊ฐ’์„ ๋ฐ”๋กœ ์ž…๋ ฅํ•ด์„œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

const a = 1;
a = 2;

const๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๊ฐ’์„ ์ ˆ๋Œ€ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. a = 2;๋ฅผ ์‹œ๋„ํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ const๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜์— ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ํ• ๋‹นํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ์ง€๋งŒ, ๊ทธ ๊ฐ์ฒด์— ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

const mutableObj = {
  name: '๊ฐ์ฒด'
};
mutableObj = {
   name: '์ˆ˜์ •' 
  //'๊ฒ์ฒด' ๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ '์ˆ˜์ •' ์ด๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋กœ ๋ณ€๊ฒฝ๋จ.
}

๋ณ€์ˆ˜ mutableObj ์ž์ฒด์— ๊ฐ์ฒด๋ฅผ ์žฌ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ํ•ด๋ณด๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.

mutableObj.name = '์ˆ˜์ •'; //์˜ค๋ฅ˜๋ฐœ์ƒ.
mutableObj.type = 'Object ํƒ€์ž…'; //์˜ค๋ฅ˜๋ฐœ์ƒ.

๐Ÿคฒ Method(๋ฉ”์„œ๋“œ)
๊ฐ์ฒด์— ์ €์žฅ๋œ ๊ฐ’์ด ํ•จ์ˆ˜์ผ ๋•Œ, ๋ฉ”์„œ๋“œ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

console.log(); //์ฝ˜์†”๋„ ๊ฐ์ฒด์ด๋‹ค!!

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ด๋””์—๋‚˜ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ–ˆ์œผ๋‹ˆ global ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. console๋‹ค์Œ์— dot('.')์œผ๋กœ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ ‘๊ทผํ–ˆ๊ณ , log๋ผ๋Š” ํ‚ค์˜ ๊ฐ’์€ ํ•จ์ˆ˜์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. log๋Š” console์ด๋ผ๋Š” ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

let methodObj = {
  do: function() {
    console.log('๋ฉ”์„œ๋“œ ์ •์˜๋Š” ์ด๋ ‡๊ฒŒ');
  }
}
methodObj.do(); //ํ˜ธ์ถœํ•˜๊ธฐ.

๐Ÿคฒ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด (Nested Object)
์‹ค๋ฌด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋Š” ๊ฑฐ์˜ ์ค‘์ฒฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๊ฐ์ฒด์ผ ์ˆ˜๋„ ์žˆ๊ณ , ํ”„๋กœํผํ‹ฐ ๊ฐ’์ธ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ๊ฐ์ฒด์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

let nestedObj = { //๊ฐ์ฒด ์•ˆ์—
	type: {
		year: '2019',
		'comment-type': [{ //ํ”„๋กœํผํ‹ฐ ๊ฐ’์ธ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ๊ฐ์ฒด
			name: 'simple'
		}]
	}
}

์œ„์—์„œ 'simple'์„ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?

console.log(nestedObj.type['comment-type'][0].name);
/* ```nestedObj```๋ณ€์ˆ˜์— ์ ‘๊ทผ -> 
๊ฐ์ฒด ```type```์— ์ ‘๊ทผ -> 
๊ฐ์ฒด```['comment-type']```์— ์ ‘๊ทผ 
(์ค‘๊ด„ํ˜ธ์ธ ์ด์œ : ๊ฐ์ฒด ์ด๋ฆ„์— '' ๋”ฐ์˜ดํ‘œ๊ฐ€ ์‚ฌ์šฉ๋๊ธฐ ๋•Œ๋ฌธ์—)
๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด ```'comment-type'```์˜ ๊ฐ’์ด ๋ฐฐ์—ด๋กœ ์ด๋ฃจ์–ด์กŒ๊ณ  
๊ทธ ๋ฐฐ์—ด์˜ ์š”์†Œ ๋˜ํ•œ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— 
[0] ๋ฒˆ์งธ์˜ ๊ฐ์ฒด์ธ ```name```์— ์ ‘๊ทผํ•˜์—ฌ 
simple์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค!!*/

์ปดํ“จํ„ฐ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•ด์„ํ•œ ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•˜๊ณ  ์ดํ•ดํ•ด์ฃผ์„ธ์š”.
ํ•ญ์ƒ ์™ผ์ชฝ์— ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์จ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋ง์•„์ฃผ์„ธ์š”!!

  • nestedObj.type๋Š” year, comment-type์ด ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค
  • nestedObj.type['comment-type']๋Š” ์š”์†Œ 1๊ฐœ์ธ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • nestedObj.type['comment-type'][0] ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์ธ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • nestedObj.type['comment-type'][0].name ๋“œ๋””์–ด 'simple'์— ์ ‘๊ทผ!

๐Ÿคฒ ๊ฐ์ฒด๋Š” reference๋กœ ์ €์žฅ๋œ๋‹ค.
๊ฐ์ฒด๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋ฉด ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ์ž์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ reference๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ํ…์ŠคํŠธ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋ฉด ํ…์ŠคํŠธ ์ž์ฒด๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ™์€ ํ…์ŠคํŠธ๋ฉด ์„œ๋กœ ๊ฐ’์ด ๊ฐ™์œผ๋ฏ€๋กœ true์ž…๋‹ˆ๋‹ค.

const a = '์•ˆ๋…•';
const b = '์•ˆ๋…•';
console.log(a === b); //true

๊ทธ๋Ÿฐ๋ฐ ์•„๋ž˜์˜ ๊ฐ์ฒด๋Š” ์ƒ๊ธด ๋ชจ์–‘์ด ์•„์˜ˆ ๋˜‘๊ฐ™์€๋ฐ false๋ผ๊ณ  ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

const hiObj = { 
  name: '์•ˆ๋…•' 
};
const helloObj = {
  name: '์•ˆ๋…•'
};
console.log('๊ฐ์ฒด๋น„๊ต =>', hiObj === helloObj); //false

๊ทธ ์ด์œ ๋Š” ๊ฐ์ฒด๋Š” ๋ณ€์ˆ˜์— ์ €์žฅํ•  ๋•Œ, ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด๊ฐ€ ๋‹ด๊ธด ์–ด๋А ๋ฉ”๋ชจ๋ฆฌ์˜ reference ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

hiObj๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ์ง„์งœ ๊ฐ’์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์ธ reference์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ hiObj๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ค๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋ˆˆ์— ๋ณด์ด๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋˜‘๊ฐ™์ง€๋งŒ, hiObj์™€ helloObj๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ์ง„์งœ ๊ฐ’์€ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

console.log('๊ฐ์ฒด๋น„๊ต =>', hiObj === helloObj);
//false ๊ฐ์ฒด๋Š” ๋‹ค๋ฅด๊ณ 
console.log('๊ฐ์ฒด๊ฐ’๋น„๊ต =>', hiObj.name === helloObj.name); 
//true ๊ฐ์ฒด๊ฐ’์€ ๊ฐ™๋‹ค

๊ทธ๋ž˜์„œ ๊ฐ์ฒด๋ฅผ ๋‹ด์€ ๋ณ€์ˆ˜๋ฅผ ๋น„๊ตํ•˜๋ฉด ์„œ๋กœ ๊ฐ™์ง€ ์•Š๋‹ค๊ณ  ๋‚˜์˜ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ํ…์ŠคํŠธ์ผ ๊ฒฝ์šฐ๋Š”, ํ…์ŠคํŠธ๋ฅผ ๋น„๊ตํ•˜๊ฒŒ ๋˜์–ด ์„œ๋กœ ๊ฐ™์Œ/๋‹ค๋ฆ„ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const mutableObj = {
  name: '๊ฐ์ฒด'
};
mutableObj = {
   name: '์ˆ˜์ •'
}
mutableObj.name = '์ˆ˜์ • ๋ฉ๋‹ˆ๋‹ค!';

const๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์ ˆ๋Œ€ ๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ mutableObj์— ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค. ์™œ๋ƒ๋ฉด ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(reference)๋กœ ์ˆ˜์ •์„ ์‹œ๋„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .
ํ•˜์ง€๋งŒ mutableObj.name ๋กœ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ ‘๊ทผํ•ด์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. mutableObj๊ฐ€ ์ €์žฅ๋œ reference๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์ด๋ผ ์ˆ˜์ •์ด ๋˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค!

๐Ÿคฒ Assignment
์•„๋ž˜์˜ ๊ฐ์ฒด์—์„œ '์ƒ๋Ÿฌ๋“œ'๋ผ๋Š” ๊ฐ’์ด ์ถœ๋ ฅ ๋  ์ˆ˜ ์žˆ๋„๋ก getAnswerํ•จ์ˆ˜์—์„œ return ํ•ด ์ฃผ์„ธ์š”.

let myProfile = {
  name: '๊น€๊ฐœ๋ฐœ',
  address: {
    email: 'geabal@gmail.com',
    home: '์œ„์›Œํฌ'
  },
  'my favorite': {
    food: [{
      name: '์ƒ๋Ÿฌ๋“œ',
      price: 3500
    }, {
      name: '์‚ผ๊ฒน์‚ด',
      price: 15000
    }],
    hobby: ['์ถ•๊ตฌ']
  }
}
function getAnswer () {
  return myProfile.['my favorite'].food[0].name;
}

๊ฐ์ฒด myProfile ์— ์ ‘๊ทผ -> ๊ฐ์ฒด 'my favorite' ์— ์ ‘๊ทผ (ํ™€๋”ฐ์˜ดํ‘œ์™€ ๊ณต๋ฐฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— [] ๋กœ ๊ฐ์‹ธ์ค€๋‹ค.) -> ๊ฐ์ฒด food[0]์— ์ ‘๊ทผ (๋ฐฐ์—ด ์š”์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Ÿฌ๋“œ๊ฐ€ ์žˆ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•ด์ค€๋‹ค.) -> name๊ฐ์ฒด์— ์ ‘๊ทผ! ์ƒ๋Ÿฌ๋“œ ์ถœ๋ ฅ.

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