본문 바로가기
JAVASCRIPT

[JS][네이티브] Symbol()

by KBS 2022. 2. 8.
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

댓글