Symbol 사용

Jaeseok Han·2023년 2월 21일

javascript 문법

목록 보기
2/11
post-thumbnail

1. 심볼(Symbol)

유일성을 보장 (new를 붙이지 않음)

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

모든 코드에서 딱 하나만 존재

2. 심볼형 property key

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

objsect method 심볼형 프로퍼티 제외

Object.keys(user) // [ 'name', 'age' ]
Object.values(user) // [ 'jackson', 30 ]
Object.entries(user) // [ [ 'name', 'jackson' ], [ 'age', 30 ] ]

3. 전역심볼 Symbol.for()

없으면 만들고, 있으면 가져오기 때문에
하나의 심볼만 보장받을 수 있음
Symbol 함수는 매번 다른 Symbol 값을 생성
Symbol.for 메소드는 하나를 생성한 뒤 키를 통해 같은 Symbol을 공유

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

키를 통해서 동일한 Symbol 공유

console.log(id1 === id2) //true

4. 숨겨진 Symbol key 확인 법

const user = {
	name : "jackson",
    age : 30,
    [id] : "myid"
}
Object.getOwnPropertySymbols(user); // [ Symbol(id) ]
Reflect.ownKeys(user); // [ 'name', 'age', Symbol(id) ]

5. 심볼 사용 예제

자주 사용되는 용법은 아니지만 간혹 유용하게 사용할 수 있음
새로운 프로퍼티를 추가하는 경우

const user = {
	name : "jackson",
    age : 30,
}

여기서 user에 새로운 property를 추가하게 될 때

user.showName = function () {}	
//기존에 사용중인 for문
for(let key in user){
    console.log(`His ${key} is ${user[key]}.`);
}	
//His name is jackson.
//His age is 30.
//His showName is function(){}. 새로추가된 프로퍼티

기존에 사용되는 함수에 적용시키고 싶지 않을때 Symbol 사용

const showName = Symbol("show name");
user[showName] = function(){
	console.log(this.name)
}
//기존에 사용중인 for문
for(let key in user){
    console.log(`His ${key} is ${user[key]}.`); 
}
//His name is jackson.
//His age is 30.
//Symbol로 추가된 프로퍼티 출력되지 않음
user[showName](); //Mike

0개의 댓글