๐Ÿ“– [JavaScript] ์‹ฌ๋ณผ(Symbol)

ํ˜ฑยท2022๋…„ 9์›” 5์ผ

JavaScript_Intermediate

๋ชฉ๋ก ๋ณด๊ธฐ
4/19

property key: ๋ฌธ์žํ˜•

๐Ÿ”Ž Symbol: ์œ ์ผํ•œ ์‹๋ณ„์ž๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ

const a =Symbol();
new๋ฅผ ๋ถ™์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค!

์œ ์ผ์„ฑ์ด ๋ณด์žฅ: ์ „์ฒด ์ฝ”๋“œ ์ค‘์— ๋”ฑ ํ•˜๋‚˜!

const id = Symbol('id');
const id2 = Symbol('id');
id === id2 //false
id == id2  //false

๐Ÿ“Œ property key: ์‹ฌ๋ณผํ˜•

const id = Symbol('id');
const user = {
  name: 'Mike',
  age: 30,
  [id] : 'myid'
}

user 
//{name: 'Mike', age:30, Symbol(id): "myid"}
Object.keys(user) // ["name", age] //symbol id๋Š” ์—†์Œ!

์›๋ณธ ๊ฐ์ฒด๋ฅผ ๊ฑด๋“ค์ด์ง€ ์•Š๊ณ  property๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ!
Object.getOwnPropertySymbols(user); ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ˆจ๊ฒจ์ง„ Symbol key๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Œ

const id = Symbol('id');
const user = {
  name: 'Mike',
  age: 30,
  [id] : 'myid'
}
Object.getOwnPropertySymbols(user); //[Symbol(id)]
Reflect.ownKeys(user); //Symbol์„ ํฌํ•จํ•œ ๊ฐ์ฒด์˜ ๋ชจ๋“  ํ‚ค๋ฅผ ๋ณด์—ฌ์คŒ 
//["name". "age", "Symbol(id)]
์ž˜ ์‚ฌ์šฉํ•˜์ง„ ์•Š์œผ๋‹ˆ ๊ทธ๋ƒฅ ์•Œ์•„๋‘๊ธฐ๋งŒ ํ•˜์ž! 

๐Ÿ“Œ Symbol.for() : ์ „์—ญ ์‹ฌ๋ณผ

ํ•˜๋‚˜์˜ ์‹ฌ๋ณผ๋งŒ ๋ณด์žฅ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ: ์—†์œผ๋ฉด ๋งŒ๋“ค๊ณ , ์žˆ์œผ๋ฉด ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ
Symbol ํ•จ์ˆ˜๋Š” ๋งค๋ฒˆ ๋‹ค๋ฅธ Symbol ๊ฐ’์„ ์ƒ์„ฑํ•˜์ง€๋งŒ, Symbol.for ๋ฉ”์†Œ๋“œ๋Š” ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑํ•œ ๋’ค ํ‚ค๋ฅผ ํ†ตํ•ด ๊ฐ™์€ Symbol์„ ๊ณต์œ 

const id1 = Symbol.for('id');
const id2 = Symbol.for('id');
id1===id2; //true

์ด๋ฆ„์„ ์–ป๊ณ  ์‹ถ๋‹ค๋ฉด, Symbol.keyFor(id1); //'id'
์ „์—ญ ์‹ฌ๋ณผ์ด ์•„๋‹Œ ์‹ฌ๋ณผ์€ keyFor()์„ ์“ธ ์ˆ˜ ์—†์Œ.
๋Œ€์‹ ์—, description์œผ๋กœ ์ด๋ฆ„์„ ์•Œ ์ˆ˜ ์žˆ์Œ

const id = Symbol('id ์ž…๋‹ˆ๋‹ค.');
id.description ; //"id ์ž…๋‹ˆ๋‹ค."

๐Ÿ”— ์˜ˆ์‹œ ์ฝ”๋“œ

//๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“ค์–ด ๋†“์€ ๊ฐ์ฒด
const user = {
  name: "Mike",
  age: 30
};

//๋‚ด๊ฐ€ ์ž‘์—…
user.showName = function(){}; //์ด๋Ÿฌ๋ฉด His showName is function(){}๋กœ ๋‚˜์˜ด
const showName = Symbol('show name');
user[showName] = function(){
  console.log(this.name);
};

//์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ•˜๋ฉด ๋ณด๋Š” ๋ฉ”์„ธ์ง€
for (let key in user) {
  console.log(`His ${key} is ${user[key]},`);
profile
new blog: https://hae0-02ni.tistory.com/

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