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

JavaScript

[JavaScript] Symbol

๋ฐ˜์‘ํ˜•

๐Ÿšจ ์•„๋ž˜ ๋”๋ณด๊ธฐ๋Š” ๊ฐœ์ธ์  ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ๊ธฐ๋กํ•œ ํ”์ ์ž…๋‹ˆ๋‹ค.

 

๋”๋ณด๊ธฐ

์ฑ…์„ ์ฝ๊ธฐ ์ „ ์˜ˆ์ƒ๋˜๋Š” Symbol

 

Symbol์€ ์ƒˆ๋กœ์šด type์œผ๋กœ ๊ฐ์ฒด ์†์„ฑ์˜ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹.

Symbol์€ ๋””๋ฒ„๊น… ๋ชฉ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉ๋จ.

Symbol()๋กœ ํ˜ธ์ถœ ํ• ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ชจ๋“  ๊ธฐํ˜ธ์™€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ๊ณ ์œ ํ•œ ๊ธฐํ˜ธ๋ฅผ ์–ป๊ฒŒ ๋จ.

Symbol()์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ณ  Symbol()์˜ ๊ธฐํ˜ธ ์„ค๋ช…์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•จ.

Symbol์€ ๊ฐ์ฒด์˜ key๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋‚˜, getOwnPropertynames, for in ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋กœ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ณ , getOwnPropertySymbols()๋ฅผ ํ†ตํ•ด์„œ๋งŒ Symbol๋กœ ๋œ key์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ. 

๐Ÿ€ ์‹ฌ๋ฒŒ์ด๋ž€?

  • ์‹ฌ๋ฒŒ์€ es6์—์„œ ๋„์ž…๋œ 7๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ์›์‹œ ํƒ€์ž…์˜ ๊ฐ’์ด๋‹ค. 
  • ์‹ฌ๋ฒŒ ๊ฐ’์€ ๋‹ค๋ฅธ ๊ฐ’๊ณผ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์œ ์ผ๋ฌด์ดํ•œ ๊ฐ’์ด๋‹ค. 
  • ์ด๋ฆ„์˜ ์ถฉ๋Œ ์œ„ํ—˜์ด ์—†๋Š” ์œ ์ผํ•œ ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ€ ์‹ฌ๋ฒŒ ๊ฐ’์˜ ์ƒ์„ฑ

symbol ํ•จ์ˆ˜

  • ๋‹ค๋ฅธ ์›์‹œ๊ฐ’๊ณผ๋Š” ๋‹ฌ๋ฆฌ Symbol ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค.
  • ์ƒ์„ฑ๋œ ์‹ฌ๋ฒŒ ๊ฐ’์€ ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š์•„ ํ™•์ธํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋‹ค๋ฅธ ๊ฐ’๊ณผ ์ ˆ๋Œ€ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์œ ์ผ๋ฌด์ดํ•œ ๊ฐ’์ด๋‹ค.
    const only = Symbol();
    console.log(typeof only); // symbol
    
    //์‹คํ–‰ ๊ฐ’์€ ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š์•„ ํ™•์ธํ•  ์ˆ˜ ์—†์Œ.
    console.log(only); //Symbol()โ€‹
  • Symbol ํ•จ์ˆ˜์—๋Š” ๋ฌธ์ž์—ด์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ณ ,์ด ๋ฌธ์ž์—ด์€ ์ƒ์„ฑ๋œ ์‹ฌ๋ฒŒ ๊ฐ’์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ๋””๋ฒ„๊น… ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉ๋˜๋ฉฐ
  • ์‹ฌ๋ฒŒ ๊ฐ’ ์ƒ์„ฑ์— ์–ด๋– ํ•œ ์˜ํ–ฅ๋„ ์ฃผ์ง€ ์•Š์Œ.
  • ์ธ์ž๋กœ ๋“ค์–ด๊ฐ„ ๋ฌธ์ž์—ด์ด ๊ฐ™๋”๋ผ๋„ ์ƒ์„ฑ๋œ ์‹ฌ๋ฒŒ ๊ฐ’์€ ์œ ์ผ๋ฌด์ดํ•œ ๊ฐ’์ž„.
    const me = Symbol("daniel");
    const metoo = Symbol("daniel");
    
    console.log(me === metoo) // falseโ€‹โ€‹
     
  • ์‹ฌ๋ฒŒ ๊ฐ’๋„ ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ถˆ๋ฆฌ์–ธ๊ณผ ๊ฐ™์ด ๊ฐ์ฒด์ฒ˜๋Ÿผ ์ ‘๊ทผํ•˜๋ฉด ๋ž˜ํผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 
๐ŸŒฑ ๋ž˜ํผ ๊ฐ์ฒด๋ž€? ์›์‹œ๊ฐ’์ธ ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์˜ ๊ฒฝ์šฐ ์ด๋“ค ์›์‹œ๊ฐ’์— ๋Œ€ํ•ด ๋งˆ์น˜ ๊ฐ์ฒด์ฒ˜๋Ÿผ ๋งˆ์นจํ‘œ ํ‘œ๊ธฐ๋ฒ•(or ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•)์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์ผ์‹œ์ ์œผ๋กœ ์›์‹œ๊ฐ’์„ ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด ์ค€๋‹ค. ์ฆ‰, ์›์‹œ๊ฐ’์„ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์•”๋ฌต์ ์œผ๋กœ ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋กœ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋‹ค์‹œ ์›์‹œ๊ฐ’์œผ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค. ์ด์™€ ๊ฐ™์ด ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์— ๋Œ€ํ•ด ๊ฐ์ฒด์ฒ˜๋Ÿผ ์ ‘๊ทผํ•˜๋ฉด ์ƒ์„ฑ๋˜๋Š” ์ž„์‹œ ๊ฐ์ฒด๋ฅผ ๋ž˜ํผ ๊ฐ์ฒด๋ผ๊ณ ํ•œ๋‹ค. 

Symbol ํ•จ์ˆ˜์˜ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด

const me = Symbol('daniel');

console.log(me.description); // daniel
console.log(me.toString()); // Symbol(daniel)

// ์œ„ description ํ”„๋กœํผํ‹ฐ์™€ toString ๋ฉ”์„œ๋“œ๋Š” Symbol.prototype์˜ ํ”„๋กœํผํ‹ฐ๋‹ค.
  • ์‹ฌ๋ฒŒ ๊ฐ’์€ ์•”๋ฌต์ ์œผ๋กœ ๋ฌธ์ž์—ด์ด๋‚˜ ์ˆซ์ž ํƒ€์ž…์œผ๋กœ๋Š” ๋ณ€ํ™˜๋˜์ง€ ์•Š์œผ๋‚˜, ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…์œผ๋กœ๋Š” ์•”๋ฌต์ ์œผ๋กœ ํƒ€์ž… ๋ณ€ํ™˜์ด๋˜์–ด if๋ฌธ์„ ํ†ตํ•ด ์กด์žฌ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    const me = Symbol();
    
    if(me) console.log("me is not empty") // me is not empty

Symbol.for / Symbol.keyfor ๋ฉ”์„œ๋“œ

  • Symbol.for ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋ฌธ์ž์—ด์„ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค์™€ ์‹ฌ๋ฒŒ ๊ฐ’์˜ ์Œ๋“ค์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ „์—ญ ์‹ฌ๋ฒŒ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ(global symbol registry)์—์„œ ํ•ด๋‹น ํ‚ค์™€ ์ผ์น˜ํ•˜๋Š” ์‹ฌ๋ฒŒ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค. 
    • ๊ฒ€์ƒ‰์— ์„ฑ๊ณตํ•˜๋ฉด ์ƒˆ๋กœ์šด ์‹ฌ๋ฒŒ ๊ฐ’์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๊ฒ€์ƒ‰๋œ ์‹ฌ๋ฒŒ ๊ฐ’์„ ๋ฐ˜ํ™˜
    • ๊ฒ€์ƒ‰์— ์‹คํŒจํ•˜๋ฉด ์‹ฌ๋ฒŒ ๊ฐ’์„ ์ƒ์„ฑํ•˜์—ฌ Symbol.for ๋ฉ”์„œ๋“œ์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ํ‚ค๋กœ ์ „์—ญ ์‹ฌ๋ฒŒ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ €์žฅํ•œ ํ›„ ์ƒ์„ฑ๋œ ์‹ฌ๋ฒŒ ๊ฐ’์„ ๋ฐ˜ํ™˜
      // ์ „์—ญ ์‹ฌ๋ฒŒ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— me๋ผ๋Š” ํ‚ค๋กœ ์ €์žฅ๋œ ์‹ฌ๋ฒŒ ๊ฐ’์ด ์žˆ๋Š”์ง€ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์—†๋‹ค๋ฉด ์ƒˆ ์‹ฌ๋ฒŒ ๊ฐ’์„ ์ƒ์„ฑ
      const me = Symbol.for("daniel");
      // ์ „์—ญ ์‹ฌ๋ฒŒ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— me๋ผ๋Š” ํ‚ค๋กœ ์ €์žฅ๋œ ์‹ฌ๋ฒŒ ๊ฐ’์ด ์žˆ์œผ๋ฉด ํ•ด๋‹น ์‹ฌ๋ฒŒ ๊ฐ’์„ ๋ฐ˜ํ™˜
      const metoo = Symbol.for("daniel");
      
      console.log(me === metoo) // true
  • Symbol ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์œ ์ผ๋ฌด์ดํ•œ ์‹ฌ๋ฒŒ ๊ฐ’์„ ์ƒ์„ฑํ•˜์ง€๋งŒ ์ „์—ญ ์‹ฌ๋ฒŒ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์‹ฌ๋ฒŒ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ „์—ญ ์‹ฌ๋ฒŒ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ €์žฅ๋˜์ง€ ์•Š์Œ.
  • Symbol.keyFor ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ „์—ญ ์‹ฌ๋ฒŒ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ €์žฅ๋œ ์‹ฌ๋ฒŒ ๊ฐ’์˜ ํ‚ค๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Œ.
    const me = Symbol.for('daniel');
    
    Symbol.keyFor(me); // 'daniel'
    
    const metoo = Symbol('park');
    
    Symbol.keyFor(metoo); // undefinedโ€‹

๐Ÿ€ ์‹ฌ๋ฒŒ๊ณผ ํ”„๋กœํผํ‹ฐ ํ‚ค

  • ์‹ฌ๋ฒŒ ๊ฐ’์„ ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ์‚ฌ์šฉํ•  ์‹ฌ๋ฒŒ ๊ฐ’์— ๋Œ€๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ณ  ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋Œ€๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.
    const obj = {
    	[Symbol.for('daniel')] : 1
    };
    
    obj[Symbol.for('daniel')]; // 1โ€‹
     

๐Ÿ€ ์‹ฌ๋ฒŒ๊ณผ ํ”„๋กœํผํ‹ฐ ์€๋‹‰

  • ์‹ฌ๋ฒŒ ๊ฐ’์„ ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•œ ํ”„๋กœํผํ‹ฐ๋Š” for...in ๋ฌธ์ด๋‚˜ Object.keys, Object.getOwnPropertyNames ๋ฉ”์„œ๋“œ๋กœ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค. ์ด์ฒ˜๋Ÿผ ์‹ฌ๋ฒŒ ๊ฐ’์„ ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์™ธ๋ถ€์— ๋…ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์€๋‹‰ ๊ฐ€๋Šฅ(์™„๋ฒฝํ•˜๊ฒŒ ์ˆจ๊ธธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹˜ ์ด์œ ๋Š” ํ•˜๊ธฐ์™€ ๊ฐ™์Œ)ํ•˜๋‚˜ Object.getOwnPropertySymbols ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹ฌ๋ฒŒ ๊ฐ’์„ ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ.
    const obj = {
    	[Symbol('daniel')] : 1
    };
    
    console.log(Object.keys(obj)); // []
    
    console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(daniel)]
    
    const symbolKey = Object.getOwnPropertySymbols(obj)[0]; // ํ•ด๋‹น ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜๊ฐ’์€ ๋ฐฐ์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— [0]
    
    console.log(obj[symbolKey]); // 1โ€‹

๐Ÿ€ ์‹ฌ๋ฒŒ๊ณผ ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด ํ™•์žฅ

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

Array.prototype[Symbol.for('sum')] = function(){
	return this.reduce((acc, cur) => acc + cur, 0);
};

[1, 2][Symbol.for('sum')](); // 3

๐Ÿ€ Well-known Symbol

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ธฐ๋ณธ ์ œ๊ณตํ•˜๋Š” ๋นŒํŠธ์ธ ์‹ฌ๋ฒŒ ๊ฐ’์„ ECMAScript ์‚ฌ์–‘์—์„œ๋Š” Well-known Symbol์ด๋ผ ๋ถ€๋ฅด๊ณ  ์ด๋Š” console.dir(Symbol)์„ ํ†ตํ•ด ํ™•์ธ์„ ํ•  ์ˆ˜ ์žˆ์Œ. Well-known Symbol์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ๋‚ด๋ถ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์‚ฌ์šฉ๋œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด for...of๋ฌธ์œผ๋กœ ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ๋นŒํŠธ์ธ ์ดํ„ฐ๋Ÿฌ๋ธ”์€ Well-known Symbol์ธ Symbol.iterator๋ฅผ ํ‚ค๋กœ ๊ฐ–๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๋ฉฐ, Symbol.iterator ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ECMAScript ์‚ฌ์–‘์— ๊ทœ์ •๋˜์–ด ์žˆ์Œ. ๋นŒํŠธ์ธ ์ดํ„ฐ๋Ÿฌ๋ธ”์€ ์ดํ„ฐ๋ ˆ์ด์…˜ ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•จ.

 

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

 

++ ์ฐธ๊ณ ๋กœ Object.getOwnPropertySymbols()๋Š” ์•„๋ž˜ ์‚ฌ์ง„์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋“ฏ์ด es6์—์„œ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  console.dir(Symbol)์„ ํ†ตํ•ด well-known Symbol์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ํ•จ์ˆ˜๋„ ๊ฐ์ฒด์ด๊ธฐ์— ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ํ”„๋กœํผํ‹ฐ๋Š” ์ผ๋ฐ˜ ๊ฐ์ฒด์—๋Š” ์—†๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด ๊ณ ์œ ์˜ ํ”„๋กœํผํ‹ฐ๋กœ __proto__ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด ์ƒ์†๋ฐ›๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

 

 

์ถœ์ฒ˜ : ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋”ฅ๋‹ค์ด๋ธŒ

๋ฐ˜์‘ํ˜•