(JS) Symbol

Mirrer·2022년 5월 2일
0

JavaScript

목록 보기
13/24
post-thumbnail

Symbol

유일한 key, value를 생성하는 데이터 타입

Symbol()함수는 심볼(symbol) 형식의 값을 반환한다.

심볼은 내장 객체(built-in objects)의 여러 멤버를 가리키는 정적 프로퍼티전역 심볼 레지스트리`(global symbol registry)`를 가리키는 정적 메서드를 가진다.

또한 "new Symbol()"문법을 지원하지 않아 생성자 측면에서는 불완전한 내장 객체 클래스(built-in object class)와 유사하다.

Symbol()로부터 반환되는 모든 심볼 값은 고유하다. 그래서 심볼 값은 객체 프로퍼티(object properties)에 대한 식별자로 사용될 수 있는데 이것이 심볼 데이터 형식의 유일한 목적이다.

심볼(symbol) 데이터 형은 원시 데이터 형(primitive data type)의 일종이다.


Symbol의 사용

Map에서 key값이 같으면 동일하게 인식한다.

const map = new Map();
const key1 = 'key';
const key2 = 'key';

map.set(key1, 'hello');
console.log(map.get(key2)); // hello
console.log(key1 === key2); // true

위와 같은 경우에서 symbol을 사용해 각각의 고유한 키를 부여

const map = new Map();
const key1 = Symbol('key');
const key2 = Symbol('key');

map.set(key1, 'hello');
console.log(map.get(key2)); // undefined
console.log(key1 === key2); // false

Symbol.for 메서드

Symbol.for 메서드는 전역 심벌 레지스트리(global sysmbol registry)에서 생성, 재사용되며 동일한 이름으로 하나의 키를 만들 때 사용한다.

// 같은 문자열이라도 서로다른 symbol을 만들 때 Symbol사용
const k1 = Symbol('key');
const k2 = Symbol('key');
console.log(k1 === k2); // false

// 동일한 문자열이 동일한 symbol을 만들 때 Symbol.for사용
const k3 = Symbol.for('key');
const k4 = Symbol.for('key');
console.log(k3 === k4); // true

symbol의 문자열 정보를 확인할 때 keyFor메서드 사용한다. (레지스트리를 이용한 symbol만 가능)

// 같은 문자열이라도 서로다른 symbol을 만들 때 Symbol사용
const k1 = Symbol('key');
console.log(Symbol.keyFor(k1)); // undefined

const k3 = Symbol.for('key');
const k4 = Symbol.for('key');
console.log(Symbol.keyFor(k3)); // key

참고 자료

Symbol - JavaScript | MDN
모던 자바스크립트 Deep Dive
모던 JavaScript 튜토리얼

profile
memories Of A front-end web developer

0개의 댓글