프론트엔드 기본개념 복습/Javascript

[Javscript] Symbol 타입

콘요맘떼 2022. 1. 30. 22:28

자바스크립트의 원시타입에는 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),

                ...

                })