유일한
key
,value
를 생성하는 데이터 타입
Symbol()
함수는 심볼(symbol) 형식의 값을 반환한다.
심볼은 내장 객체(built-in objects)
의 여러 멤버를 가리키는 정적 프로퍼티와 전역 심볼 레지스트리`(global symbol registry)`를 가리키는 정적 메서드를 가진다.
또한 "new Symbol()"
문법을 지원하지 않아 생성자 측면에서는 불완전한 내장 객체 클래스(built-in object class)
와 유사하다.
Symbol()
로부터 반환되는 모든 심볼 값은 고유하다. 그래서 심볼 값은 객체 프로퍼티(object properties)
에 대한 식별자로 사용될 수 있는데 이것이 심볼 데이터 형식의 유일한 목적이다.
즉 심볼(symbol)
데이터 형은 원시 데이터 형(primitive data type)
의 일종이다.
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
메서드는 전역 심벌 레지스트리(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 튜토리얼