자바스크립트 심볼(Symbol)

자바스크립트에는 기존의 데이터 타입과 다른, 유일하고 변경 불가능한 원시 데이터 타입인 심볼(Symbol)이 존재합니다. 이번 포스트에서는 심볼에 대해 알아보고, 사용하는 방법에 대해 알아보겠습니다.

심볼(Symbol)이란?

심볼(Symbol)은 유일성(unique)을 보장하는 데이터 타입으로, 다른 어떤 값과도 충돌하지 않는 고유한 값을 가집니다. Symbol() 생성자 함수를 통해 생성되며, new 키워드를 사용하지 않는 것에 주의해야 합니다. 심볼에는 문자열값을 전달할 수 있으며, 이는 디버깅 및 설명을 위해 사용될 수 있습니다.

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

console.log(typeof symbol1); // "symbol"
console.log(symbol2.toString()); // "Symbol(mySymbol)"

심볼의 유일성

심볼은 동일한 문자열 값이라도 항상 서로 다른 심볼입니다. 이를 통해 키(key)로 사용되는 경우, 충돌없이 고유한 식별자를 만들 수 있습니다.

const key1 = Symbol('key');
const key2 = Symbol('key');

console.log(key1 === key2); // false

심볼의 사용 예시

객체 프로퍼티 식별자로 사용하기

심볼은 주로 객체 프로퍼티의 식별자로 사용됩니다. 심볼을 사용하면, 프로퍼티 이름이 충돌하지 않고 고유한 식별자를 갖게 됩니다.

const obj = {
  [Symbol('myProperty')]: 'Hello, Symbol!'
};

console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(myProperty)]

외부 라이브러리 확장하기

심볼은 외부 라이브러리와의 상호작용에도 사용될 수 있습니다. 외부 라이브러리의 객체에 심볼을 추가하여, 라이브러리를 확장하고 사용자 정의 동작을 구현할 수 있습니다.

const library = {
  // 라이브러리의 내부 로직
};

const MY_SYMBOL = Symbol('mySymbol');
library[MY_SYMBOL] = () => {
  // 사용자 정의 동작
};

결론

자바스크립트 심볼(Symbol)은 다른 데이터 타입과는 다르게 고유성과 변경 불가능성을 갖는 원시 데이터 타입입니다. 심볼은 프로퍼티 식별자로 사용되거나, 외부 라이브러리 확장 등 다양한 상황에서 유용하게 활용될 수 있습니다. 프로그래밍 언어에 새로운 개념을 도입하는 자바스크립트 심볼에 대해 더욱 알아보고 활용해보세요.