본문 바로가기
웹/JAVA SCRIPT

[코딩 공부_105] Symbol

by BEE_0o0 2021. 7. 14.

Symbol() 함수는 심볼 형식의 값을 반환하는데, 이 심볼은 내장 객체의 여러 멤버를 가라키는 정적 프로퍼티와 전역 심볼 레지스트리를 가리키는 정적 메서드를 가지며, new symbol() 문법을 지원하지 않아 생성자 측면에서는 불완전한 내장 객체 클래스와 유사하다. symbol()로부터 반환되는 모든 심볼 값은 고유한다. 심볼 값은 객체 프로퍼티에 대한 식별자로 사용될 수 있다. 이것이 심볼 데이터 형식의 유일한 목적이다. 

매개변수

선택적 문자열. 디버깅에 사용할 수 있는 심볼에 대한 설명으로 심볼 자체에 접근하는 용도로는 사용할 수 없다.

새 원시 심볼을 생성하려면, 심볼을 설명하는 선택적 문자열과 함께 symbol()을 쓰면 된다.

var sym1 = Symbol();
var sym2 = Symbol("foo");
var sym3 = Symbol("foo");

위의 코드는 세개의 새 심볼을 생성한다. symbol("foo")는 "foo"라는 문자열을 심볼로 강제로 변환시키지 않는다는 점에 유의하자! 해당 코드는 매번 새로운 심볼을 생성한다.

Symbol("foo") === Symbol("foo"); // false

이는 작성자가 새로운 심볼 값 대신 명시적으로 심볼 래퍼 객체를 생성할 수 없게 한다. 일반적으로 우너시 데이터 형에 대한 명시적인 래퍼 객체 생성이 가능하다는 점에 비춰보면 의외일 수 있다.

꼭 심볼 래퍼 객체를 생성하고 싶다면 object() 함수를 이용할 수 있다.

var sym = Symbol("foo");
typeof sym;     // "symbol"
var symObj = Object(sym);
typeof symObj;  // "object"
심볼의 생성

1. symbol() : 전역으로 존재하는 global symbol table의 목록을 참조한다.

2. symbol.for() : token string으로 정의된 심볼이 있다면 해당 심볼을 반환하게 된다.

3. symbol.iterator

 

심볼 함수

Symbol 값은 Symbol 함수를 호출하여 생성한다. 심볼 값은 자바스크립트 런타임 환경에서 Symbol 함수에 의해 동적으로 생성되며 다른 값과 중복되지 않는 고유한 값이다. 생성된 심볼 값은 외부로 노출되지 않아 확인할 수 없다.

 

Symbol 함수에 들어가는 문자열 인자는 심볼 값에 대한 description으로서 선택적으로 넣을 수 있다. 이 문자열은 디버깅 용도로만 사용되며 심볼 값 생성에 영향을 주지는 않는다.

 

심볼 값도 객체처럼 메서드를 사용하면 암묵적으로 *래퍼 객체를 생성한다. description 프로퍼티와 toString은 Symbol.prototype의 프로퍼티다. 심볼 값은 문자열이나 숫자 타입으로 변환되지 않는다. 단 불리언 타입으로는 타입 변환이 된다.

댓글