js

javascript ์‹ฌ๋ณผ(Symbol)

์œถโ‰ 2022. 8. 31. 23:16

-symbol: ์œ ์ผํ•œ ์‹๋ณ„์ž๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ. ์œ ์ผ์„ฑ์ด ๋ณด์žฅ ๋จ

const a = Symbol(); //new๋ฅผ ๋ถ™์ด์ง€ ์•Š์Œ
const b = Symbol();

console.log(a)
console.log(b)
๊ฒฐ๊ณผ
Symbol()
Symbol()
์ผ์น˜ ์—ฐ์‚ฐ์ž๋กœ ํ™•์ธ ์‹œ
a == b; false

- property key : ์‹ฌ๋ณผํ˜•

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

console.log(user)

๊ฒฐ๊ณผ

{name: 'Mike', age: 30, Symbol(id): 'myid'}

 

-> Object ์‚ฌ์šฉ ์‹œ

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

console.log(Object.keys(user));

๊ฒฐ๊ณผ > ['name', 'age']

๋‹ค๋ฅธ Object values , entries ๋„ ์ ์€ ๋Œ€๋กœ ๋‚˜์˜ด

 

-ํŠน์ • ๊ฐœ์ฒด์— ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์†์„ฑ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ

๋‹จ ๋„ˆ๋ฌด ๋ณต์žกํ•œ ์ด๋ฆ„X, ๋‹ค๋ฅธ ์ด๊ฐ€ ๋งŒ๋“  ๊ฐ์ฒด์— ๋ฎ์–ด ์“ฐ๊ธฐ X

const user = {
    name : 'Mike',
    age : 30
}

const id = Symbol('id');
user[id] = 'myid';

console.log(user[id])

๊ฒฐ๊ณผ > myid

 

-Symbol.for(): ์ „์—ญ ์‹ฌ๋ณผ

์—†์œผ๋ฉด ๋งŒ๋“ค๊ณ  ์žˆ์œผ๋ฉด ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ์‹ฌ๋ณผ๋งŒ ๋ณด์žฅ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ

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

์ด๋ฆ„์„ ๋„ฃ์–ด์ฃผ๋ฉด ์ƒ์„ฑํ•  ๋•Œ ๋„ฃ์–ด์ฃผ์—ˆ๋˜ ์ด๋ฆ„ ์•Œ๋ ค์คŒ

์˜ˆ์‹œ) Symbol.keyFor(id1) //id

์ „์—ญ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ ์‹œ keyFor ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ ๋Œ€์‹  description ์ด์šฉ

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

๊ฒฐ๊ณผ> id์ž…๋‹ˆ๋‹ค.

-์ˆจ๊ฒจ์ง„ Symbol key ๋ณด๋Š” ๋ฒ•

symbol key ๋Š” ์™„์ „ํžˆ ์ˆจ๊ธธ ์—†์–ด Object์™€ Reflect ์‚ฌ์šฉ ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Œ

const id = Symbol('id');
const user = {
    name : 'Mike',
    age : 30,
    [id] : 'myid'
}
console.log(Object.getOwnPropertySymbols(user)); //๊ฒฐ๊ณผ> [Symbol(id)]
console.log(Reflect.ownKeys(user)); //๊ฒฐ๊ณผ> ['name', 'age', Symbol(id)]
Object.getOwnPropertySymbols(); symbols๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Œ
Reflect.ownKeys(); symbol key ํฌํ•จํ•œ ๋ชจ๋“  ๊ฐ์ฒด ๋ณด์—ฌ์คŒ
 
//
// ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“ค์–ด ๋†“์€ ๊ฐ์ฒด
const user = {
    name : 'Mike',
    age : 30,
};

//๋‚ด ์ž‘์—…
// user.showName = fuction(){} ; > His showname is fuction(){}.
const showName = Symbol('show name');
user[showName] = function(){
    console.log(this.name);
};

user[showName]();

//์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ•˜๋ฉด ๋ณด๋Š” ๋ฉ”์„ธ์ง€
for(let key in user){
    console.log(`His ${key} is ${user[key]}.`);
}

๊ฒฐ๊ณผ>
Mike
His name is Mike.
His age is 30.