Chapter 11: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹ฌ๋ณผ (Symbols)

๐Ÿ’ก ๋„์„œ ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•ต์‹ฌ ๊ฐ€์ด๋“œ๋ฅผ ์ฝ๊ณ  ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

11.1 ์‹ฌ๋ฒŒ์˜ ๊ณ ์œ ์„ฑ


์‹ฌ๋ฒŒ์€ ES6์— ์ฒ˜์Œ ์ถ”๊ฐ€๋œ ์›์‹œ ์ž๋ฃŒํ˜•์œผ๋กœ ํ•ญ์ƒ ๊ณ ์œ ์„ฑ์„ ์ง€๋‹˜

const me = Symbol("Alberto");
console.log(me);
// Symbol(Alberto)

const clone = Symbol("Alberto");
console.log(clone);
// Symbol(Alberto)

console.log(me == clone);
// false
console.log(me === clone);
// false

11.2 ๊ฐ์ฒด ์†์„ฑ์— ๋Œ€ํ•œ ์‹๋ณ„์ž


๊ฐ์ฒด ์†์„ฑ์˜ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๋™์ผํ•œ ์†์„ฑ๋ช…์ด ๊ฐ๊ฐ ๊ณ ์œ ํ•˜๊ฒŒ ์กด์žฌํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

const office = {
  [Symbol("Tom")]: "CEO",
  [Symbol("Mark")]: "CTO",
  [Symbol("Mark")]: "CIO",
};

for (person in office) {
  console.log(person);
}
// undefined

11.3 ์‹ฌ๋ฒŒ์˜ ๋ฐ˜๋ณต


์‹ฌ๋ฒŒ์€ ์—ด๊ฑฐ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์‹ฌ๋ฒŒ์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์„ ์œ„ํ•ด์„  Object.getOwnPropertySymbols() ๋ฅผ ์‚ฌ์šฉ

const office = {
  [Symbol("Tom")] : "CEO",
  [Symbol("Mark")] : "CTO",
  [Symbol("Mark")] : "CIO",
};

const symbols = Object.getOwnPropertySymbols(office);
console.log(symbols);
// 0: Symbol(Tom)
// 1: Symbol(Mark)
// 2: Symbol(Mark)
// length: 3

// ๋ฐฐ์—ด์„ ์–ป์€ ํ›„ ์†์„ฑ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด map ์‚ฌ์šฉ
const office = {
  [Symbol("Tom")] : "CEO",
  [Symbol("Mark")] : "CTO",
  [Symbol("Mark")] : "CIO",
};

const symbols = Object.getOwnPropertySymbols(office);
const value = symbols.map(symbol => office[symbol]);
console.log(value);
// 0: "CEO"
// 1: "CTO"
// 2: "CIO"
// length: 3