Symbol은 ES6에서 도입 된 7번째 데이터 타입으로 변경 불가능한 원시 타입의 값

Symbol은 다른 값과 중복 되지 않는 유일무이한 값으로 주로 이름 중복의 위험이 없는 유일한 프로퍼티 키를 만들기 위해 사용된다.

/* Symbol()을 사용하면 심볼 값을 만들 수 있다. */
let symbol1 = Symbol();

console.log(typeof symbol1);  // symbol

심볼 이름은 어떤 값에도 영향을 주지 않는 이름표 역할만 함

let symbol2 = Symbol("mySymbol");
let symbol3 = Symbol("mySymbol");

console.log(symbol2 == symbol3);  // false 
console.log(symbol2); // Symbol(mySymbol)

전역 심볼 레지스트리

전역 심볼 레지스트리(global symbol registry)에 심볼을 만들고 해당 심볼에 접근하면, 이름이 같은 경우 항상 동일한 심볼을 반환한다.

let symbol = Symbol.for("id");
let idAgain = Symbol.for("id");

console.log(symbol === idAgain);  
// true - 이름이 같은 두 전역 심볼은 완전히 일치한다.

/* 반대로 Symbol.keyFor(symbol)을 사용하면 이름을 얻을 수 있다. */
console.log(Symbol.keyFor(symbol));