๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ปSTUDY/JavaScript

[JavaScript] ์ฐธ์กฐ์— ์˜ํ•œ ๊ฐ์ฒด ๋ณต์‚ฌ

๋ฐ˜์‘ํ˜•

์ฐธ์กฐ์— ์˜ํ•œ ๊ฐ์ฒด๋ณต์‚ฌ

  • ๊ฐ์ฒด์™€ ์›์‹œํƒ€์ž…์˜ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด ์ค‘ ํ•˜๋‚˜๋Š” ๊ฐ์ฒด๋Š” '์ฐธ์กฐ์— ์˜ํ•ด(by reference)' ์ €์žฅ๋˜๊ณ  ๋ณต์‚ฌ๋œ๋‹ค.
  • ์›์‹œ๊ฐ’(๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ถˆ๋ฆฐ ๊ฐ’)์€ '๊ฐ’ ๊ทธ๋Œ€๋กœ' ์ €์žฅยทํ• ๋‹น๋˜๊ณ  ๋ณต์‚ฌ๋œ๋‹ค.
let message = 'Hello';
let cloneMessage = message;
cloneMessage = 'CloneHello';
console.log(message, cloneMessage); // Hello CloneHello

๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋œ ๋ณ€์ˆ˜๋ฅผ ๋ณต์‚ฌํ•˜๋ฉด ๋™์ผํ•œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ ๊ฐ’์ด ํ•˜๋‚˜ ๋” ๋งŒ๋“ค์–ด์ง„๋‹ค.

let user = { name: 'John'; }
let admin = user;
admin.name = 'Pete';
console.log(user, admin); // {name: 'Pete'} {name: 'Pete'}

๊ฐ์ฒด๋ฅผ ์„œ๋ž์žฅ์— ๋น„์œ ํ•˜์ž๋ฉด ๋ณ€์ˆ˜๋Š” ์„œ๋ž์žฅ์„ ์—ด ์ˆ˜ ์žˆ๋Š” ์—ด์‡ ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ž์žฅ์€ ํ•˜๋‚˜({name: 'John'}), ์—ด์‡ ๋Š” ๋‘ ๊ฐœ(user, admin), ์ค‘ admin์„ ์‚ฌ์šฉํ•ด ์„œ๋ž์žฅ์„ ์—ด์–ด ์ •๋ˆ ํ›„(admin.name = 'Pete'), ๋˜ ๋‹ค๋ฅธ ์—ด์‡ ๋กœ ์„œ๋ž์žฅ์„ ์—ด๋ฉด ์ •๋ˆ๋œ ์—ด์‡ ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์ฐธ์กฐ์— ์˜ํ•œ ๋น„๊ต

let a = {};
let b = a; // ์ฐธ์กฐ์— ์˜ํ•œ ๋ณต์‚ฌ.

console.log(a == b); // true, ๋‘ ๋ณ€์ˆ˜๋Š” ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ.
console.log(a === b); // true

์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ๋‘ ๊ฐ์ฒด ๋ชจ๋‘ ๋น„์–ด์žˆ๋‹ค๋Š” ์ ์—์„œ ๊ฐ™์•„ ๋ณด์ด๋‚˜, ๋…๋ฆฝ๋œ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ผ์น˜ยท๋™๋“ฑ ๋น„๊ตํ•˜๋ฉด ๊ฑฐ์ง“์ด ๋ฐ˜ํ™˜๋œ๋‹ค.

let a = {};
let b = {}; // ๋…๋ฆฝ๋œ ๋‘ ๊ฐ์ฒด.

console.log(a === b); // false

 

์ค‘์ฒฉ๊ฐ์ฒด๋ณต์‚ฌ

let user = {
    name: 'John',
    sizes: {
        height: 182,
        width: 50
    } 
};
console.log(user.sizes.height); // 182

clone.sizes = user.sizes๋กœ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณต์‚ฌํ•ด๋„ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ์ˆ˜๋Š” ์—†๋‹ค. user.sizes๋Š” ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐ๊ฐ’์ด ๋ณต์‚ฌ๋˜๊ธฐ ๋•Œ๋ฌธ.

 


Reference

์ฐธ์กฐ์— ์˜ํ•œ ๊ฐ์ฒด ๋ณต์‚ฌ

๋ฐ˜์‘ํ˜•