자바스크립트의 원시타입에는 boolean, string, number, null, undefined, Symbol 이렇게 총 6가지가 존재한다.
그 중 Symbol은 ES6에서 새롭게 추가된 원시타입으로 변경 불가능하며 다른 값과 중복되지 않은 고유한 값을 가진다.
Symbol은 Symbol 생성 함수를 통해 만들어줄 수 있으며 선택적 인자로 문자열을 넣어줄 수 있다. 이 문자는 해당 Symbol을 표현하는 description으로 활용된다. Symbol의 description은 .description을 통해 다시 확인할 수 있다.
ex) const a = Symbol( );
const b = Symbol("this is symbol for b")
b.description => "this is symbol for b"
Symbol은 서로 다른 값을 가진다. 따라서 동일한 description 문자열을 넣어줬어도 서로 다른 값을 가진다. 만약 동일한 description 문자열 키에 대해서 동일한 값을 가지는 심볼을 여러 개 생성하고 싶다면 Symbol.for( )을 이용하면 된다.
Symbol.for( )은 전역 Symbol 레지스트리에서 해당 문자열을 키로 가지는 심볼이 있는지 탐색한 후 만약 존재한다면 해당 심볼을 반환하고 그렇지 않다면 해당 키로 새로운 심볼을 생성하여 반환한다.
ex) const a = Symbol("symbol")
const b = Symbol("symbol")
a === b => true
Symbol을 사용하는 대표적인 예시로는 자바스크립트에서 enum 구현하기가 있다. 자바스크립트에서는 객체 변경을 방지하는 Object.freeze( )함수와 심볼을 함께 사용함으로써 enum을 구현할 수 있다.
ex ) const MBTI = Object.freeze({
ISTP : Symbol('istp'),
ISTJ : Symbol('istj'),
ISFP : Symbol('isfp),
...
})
'프론트엔드 기본개념 복습 > Javascript' 카테고리의 다른 글
[Javascript] 클로저 (Closure) + Lexical Scope (0) | 2022.02.24 |
---|---|
[Javascript] this (0) | 2022.02.24 |
[Javascript] 실행 컨텍스트 (Execution Context) (0) | 2022.02.24 |
[Javascript] 이벤트 루프 (Event Loop) (0) | 2022.02.23 |
2021-09-25 자바스크립트 기본 특징 (0) | 2021.09.26 |