자바스크립트 Symbol

자바스크립트에는 ES6(ECMAScript 2015)부터 새로운 데이터 타입인 Symbol이 추가되었습니다. Symbol은 유일한(unique)한 값을 나타내는 불변(immutable)하고 원시적(primitive)인 데이터 타입입니다. 이러한 특징 때문에 주로 객체의 속성명으로 사용되며, 고유한 식별자를 생성하기 위한 용도로 많이 활용됩니다.

Symbol 생성하기

Symbol을 생성하려면 Symbol() 함수를 사용합니다.

const symbol = Symbol();
console.log(typeof symbol); // "symbol"

Symbol의 유일성

Symbol은 항상 유일(unique)한 값을 생성합니다. 동일한 인자를 가진 Symbol() 함수 호출이라도 항상 다른 Symbol 값을 반환합니다.

const symbol1 = Symbol();
const symbol2 = Symbol();
console.log(symbol1 === symbol2); // false

Symbol의 설명

Symbol 생성 시 선택적으로 설명(description)을 지정할 수 있습니다. 이 설명은 Symbol에 대한 정보를 제공하는 용도로 사용될 수 있습니다.

const symbol = Symbol('my symbol');
console.log(symbol.toString()); // "Symbol(my symbol)"

Symbol을 객체의 속성명으로 사용하기

Symbol은 주로 객체의 속성명으로 사용됩니다. Symbol 값을 속성명으로 지정하면 고유한 식별자를 만들 수 있습니다.

const key1 = Symbol('myKey');
const obj = {
  [key1]: 'value1',
  key2: 'value2'
};

console.log(obj[key1]); // "value1"
console.log(obj.key2); // "value2"

Symbol의 전역 심벌 레지스트리

Symbol은 전역 심벌 레지스트리(global symbol registry)를 가지고 있습니다. Symbol.for() 함수를 사용하여 Symbol을 전역으로 등록하고, Symbol.keyFor() 함수를 사용하여 등록된 Symbol의 키를 가져올 수 있습니다.

const symbol1 = Symbol.for('mySymbol');
const symbol2 = Symbol.for('mySymbol');

console.log(symbol1 === symbol2); // true
console.log(Symbol.keyFor(symbol1)); // "mySymbol"

결론

Symbol은 자바스크립트에서 고유한 식별자를 생성하기 위한 강력한 도구입니다. 객체의 속성명으로 사용되며, 전역 심벌 레지스트리를 통해 공유할 수도 있습니다. Symbol을 적절히 활용하여 코드의 가독성과 유지보수성을 높일 수 있습니다.