[JS] 심볼(symbol)은 무엇이고 하는 역할은?
심볼
ES6에서 '심볼(symbol)'이라는 원시 자료형이 추가되었습니다. 심볼은 유일한 식별자(unique identifier)를 만들고 싶을 때 사용할 수 있습니다.
Symbol()
을 사용하여 심볼값을 만들 수 있습니다.
const person = Symbol('철수');
console.log(person);
// Symbol(철수)
심볼의 고유성
앞서 말했듯이 심볼은 고유,유일하다고 했는데, 같은 값을 가진 심볼을 만들면 어떻게 되는지 코드를 통해 살펴 봅시다.
const me = Symbol('철수');
const clone = Symbol('철수');
console.log(me == clone);
// 출력 : false
심볼 값은 동일하지만, 각 심볼은 고유하기때문에 동일 연사자(==
)로 비교 시 false
가 반환되는 것을 확인할 수 있습니다.
심볼이 객체 속성일때
심볼을 사용해서 객체 속성에 대한 식별자를 만들 수 있습니다.
const people = {
"철수" : "friend",
"영미" : "friend",
"철수" : "brother",
};
for (person in people) {
console.log(person)
}
// 출력 : 철수
영미
people 객체에서 이름이 같은. 즉, 속성이 같을때 겹치는 것을 피하기 위해서 심볼을 사용할 수 있습니다.
const people = {
[Symbol("철수")] : "friend",
[Symbol("영미")] : "friend",
[Symbol("철수")] : "brother",
};
for (person in people) {
console.log(person)
}
// 출력 : undefined
예상과 다르게 출력이 undefined 입니다. 그 이유는 심볼은 for...in
에서 배제되게 됩니다. 열거 가능하지 않기때문에 심볼에 대해서 반복을 할 수 없습니다.
그래서 객체의 속성들의 배열을 얻는 방법이 존재합니다.
Object.getOwnPropertySymbols()
const people = {
[Symbol("철수")] : "friend",
[Symbol("영미")] : "friend",
[Symbol("철수")] : "brother",
};
const symbols = Object.getOwnPropertySymbols(people);
console.log(symbols);
// 출력 : (3) [Symbol(철수), Symbol(영미), Symbol(철수)]
배열이기때문에 속성에 접근을하기 위해서는 map을 사용하면 됩니다.
const symbols = Object.getOwnPropertySymbols(people);
const value = symbols.map(symbol => people[symbol]);
console.log(value);
// 출력 :
(3) ['friend', 'friend', 'brother']
0: "friend"
1: "friend"
2: "brother"
length: 3
Author And Source
이 문제에 관하여([JS] 심볼(symbol)은 무엇이고 하는 역할은?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@fkszm3/JS-심볼symbol은-무엇이고-하는-역할은저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)