NATIVE

settings_applicationsObject

NATIVE

Draft
  • account_tree
  • bug_report

ObjectSymbol

설명

Symbol 객체는 심벌(symbol) 데이터를 유일한 값으로 생성하여 객체의 프로퍼티로 사용한다.

하위 트리 탐색

  • Constructor

    Symbol 객체는 생성자 함수가 존재하지만 다른 생성자 함수처럼 new Symbol() 문법을 지원하지 않는다. symbol() 로 새로운 심벌(symbol)을 생성할 수 있다.
    • Symbol()

      심벌 형식의 값을 반환하는 함수이지만 new Symbol() 문법을 지원하지 않는다. Symbol() 함수로 부터 반환되는 모든 심벌(symbol) 값은 고유하다. 심벌(symbol) 값은 객체 프로퍼티에 대한 식별자로 사용될 수 있다. 이것은 심벌(symbol)의 유일한 목적이기도 하다. 심벌(symbol) 데이터형은 원시 데이터 형(primitive data type)이다.
  • Static

    Symbol 객체의 정적 멤버
    • Methods

      • for()

        runtime-wide 심볼 레지스트리에서 인수로 지정된 키로 존재하는 심볼을 찾는다. 없으면 전역 심볼 레지시트리에 해당 키로 새로운 심볼을 만들어 준다.
    • Properties

      • iterator

        객체에 대한 기본 반복자를 지정한다. for...of와 같이 사용된다.
  • [[Prototype]]

    생성자(constructor)를 가진 객체(object) 또는 인터페이스(interface)가 인스턴스(instance)를 생성할 때 상속할 수 있는 프로퍼티(property)와 메소드(method)를 가지고 있는 원형 객체를 참조하는 생성자의 은닉된 속성이다. 만약에 상속받은 객체(object) 또는 인터페이스(interface)가 존재한다면 상속한 객체(object) 또는 인터페이스(interface)의 [[Prototype]] 프로퍼티(property)와 메소드(method)를 추가적으로 사용할 수 있다.
    • Methods

      • toString()

        지정된 Symbol 객체를 나타내는 문자열을 반환한다.
      • valueOf()

        Symbol 객체의 원시값을 반환한다.
    • Properties

      • description

        심벌(symbol) 객체에 대한 설명을 조회한다.

기술 문서

개요

ECMAScript 6(이하 ES6)에서 Symbol 객체가 추가되었다. Symbol() 함수에 의해서 생성된 심벌(symbol) 데이터는 원시 타입 데이터로서 유일성을 갖는다.

새로운 데이터 타입의 추가

ECMAScript는 String, Number, Boolean, undefined, null 이라는 원시 데이터 타입이 존재한다. 여기에 ES6에서는 심벌(symbol)이라는 새로운 원시 데이터 타입을 추가했다. 그리고 이 데이터 타입은 한번 생성되면 변경이 불가능하다는 특징을 가지고 있고 생성된 모든 심벌(symbol)은 유일한 값이 된다.

심벌(symbol) 데이터의 생성

심벌(symbol)은 다른 원시 타입(String, Number, Boolean) 처럼 래퍼(Wrapper) 객체를 가지고 있지 않다. 하지만 프로토타입 메소드가 존재하듯이 객체처럼 다루어진다. 통상 일반 객체와는 다른 성격을 갖고 있는 특별한 객체라고 한다. 이러한 특징으로 new 키워드를 사용을 금하며 Symbol() 이라는 함수를 통해서만 생성이 가능하다.

심벌(symbol)을 생성할 때는 Symbol() 함수에게 description을 지정할 수 있다. 이 description은 값를 의미하는 것이라 아니라 심벌에 대한 설명이라 할 수 있고 디버깅 용도로 사용되어진다.

let symbol = Symbol("my symbol");

심벌(symbol)의 사용

심벌(symbol)은 고유성을 가지므로 중복된 프로퍼티를 생성하지 않도록 하는 목적으로 사용된다. 이때 심벌(symbol)로 정의된 프로퍼티는 닷(.)으로 접근하지 못하고 키(key)로 접근한다.

let myProp = Symbol();

let myObj = {};
myObj[myProp] = "Hello";

console.log(myObj[myProp]); // "Hello"

 

지원 웹브라우저