728x90
심벌은 ES6에서 처음 선보인, 새로운 원시 값 타입이다. 심벌은 충돌 염려 없이 객체 프로퍼티로 사용 가능한, 특별한 '유일 값'이다. 주로 ES6의 특수한 내장 로직에 쓰기 위해 고안되었지만 우리도 얼마든지 심벌을 정의할 수 있다.
심벌은 프로퍼티명으로 사용할 수 있으나, 프로그램 코드나 개발자 콘솔 창에서 심벌의 실제 값을 보거나 접근하는 건 불가능하다. 심벌 값을 콘솔 창에 출력해보면 Symbol(Symbol.create)
로 나온다.
ES6에는 심벌 몇 개가 미리 정의되어 있는데, Symbol.create
, Symbol.iterator
식으로 Symbol 함수 객체의 정적 프로퍼티로 접근한다.
obj[Symbol.iterator] = function () {
/* ... */
};
심벌을 직접 정의하려면 Symbol()
네이티브를 사용한다. Symbol()
은 앞에 new를 붙이면 에러가 나는 유일한 네이티브 '생성자'이다.
var mysym = Symbol("my own symbol");
mysym; // Symbol(my own symbol)
mysym.toString(); // "my own symbol"
심벌은 전용 프로퍼티는 아니지만, 본래의 사용 목적에 맞게 대부분 전용 혹은 특별한 프로퍼티로 사용한다. 지금까지 많은 개발자가 "잠깐, 이건 전용/특수/내부 프로퍼티입니다. 건드리지마세요!"라고 하고 싶을 대 습관적으로 써 왔던, 언더스코어(_)가 앞에 붙은 프로퍼티 명도 언젠가는 심벌에 의해 완전히 대체될 가능성이 높다.
심벌은 객체가 아니다. 단순한 스칼라 원시 값이다.
참고
- You Don't Know JS ( 한빛 미디어 )
728x90
'JAVASCRIPT' 카테고리의 다른 글
[JS][강제변환] 추상 연산 ToString (0) | 2022.02.08 |
---|---|
[JS][네이티브][마무리] 네이티브의 프로토타입 (0) | 2022.02.08 |
[JS][네이티브] Date() and Error() (0) | 2022.02.08 |
[JS] 프로토타입(prototype) (0) | 2022.02.03 |
[JS][네이티브] 래퍼 박싱하기 (0) | 2022.01.27 |
댓글