심벌(Symbol)이란?
- 심벌(Symbol)은 ES6에서 도입된 7번째 데이터 타입으로 변경 불가능한 원시 타입의 값입니다. 심벌 값은 다른 값과 중복되지 않는 유일무이한 값입니다. 따라서 주로 이름 충돌 위험이 없는 유일한 프로퍼티 키를 만들기 위해 사용합니다.
심벌 값의 생성
- 심벌 값은 Symbol 함수를 호출을 통해서만 생성할 수 있습니다. 이떄 생성된 심벌 값은 외부로 노출되지 않아 확인할 수 없으며, 다른 값과 절대 중복되지 않는 유일무이한 값입니다.
심벌을 통한 enum
const Direction = Object.freeze({
UP: Symbol(),
DOWN: Symbol(),
LEFT: Symbol(),
RIGHT: Symbol(),
});
const myDirection = Direction.UP;
console.log(myDirection === Direction.UP);
- enum은 명명된 숫자 상수의 집합으로 열거형이라 불립니다. C/C++, 자바, 파이썬 등 여러 프로그래밍 언어에서는 enum을 지원하지만 자바스크립트에서는 지원하지 않습니다. 그래서 위와 같이 심볼과 Object.freeze 메서드를 이용해서 enum을 구현할 수 있습니다.
심벌과 프로퍼티 키
const obj = {
[Symbol.for("sym")]: "devhun",
};
// devhun return
console.log(obj[Symbol.for("sym")]);
- Symbol을 이용해서 위와 같이 키로 사용할 Symbol을 대괄호와 Symbol 메서드를 통해 정의할 수 있습니다.
- 표준 빌트엔 객체에 프로퍼티나 메서드를 추가하는 것은 향후 ES 버전이 올라감에 따라 중복될 수 있을 가능성이 있습니다. 이를 방지하기 위해서는 Symbol을 이용해서 추가하는 것이 중복되는 것을 방지하고 안전하게 사용할 수 있습니다.