[JS ES6] Symbol 자료형

gminnimk·2025년 3월 25일

JS ES6

목록 보기
27/31

ES6부터 Symbol이라는 새로운 Primitive 자료형이 추가되었습니다. 이 자료형은 주로 Object의 비밀스런 key로 활용되어, 기존 문자형 key와는 다른 특수한 성질을 가집니다.


1️⃣ Symbol 자료형 만들기

  • 생성 방법:
    var 심볼 = Symbol('설명아무거나적기');
    
    • Symbol() 함수에 간단한 설명(라벨)을 입력하면 해당 설명을 가진 Symbol이 생성됩니다.
    • 이 설명은 단순 주석 역할이며, Symbol의 고유성을 보장하는 데는 영향을 주지 않습니다.

2️⃣ Symbol의 주요 활용: Object의 비밀스런 Key

  • 문제점:
    • 기존 Object에서는 key로 문자열만 사용할 수 있습니다.
    • 만약 문자 이외의 값을 key로 사용하면 자동으로 문자열로 치환됩니다.
  • 해결책:
    • ES6부터는 Symbol도 key로 사용할 수 있어, 이름이 충돌하지 않는 비밀스러운 속성을 만들 수 있습니다.
  • 예제:
    var person = { name: 'Kim' };
    person.weight = 100;
    
    var weight = Symbol('내 진짜 몸무게');
    person[weight] = 200;
    
    console.log(person);
    
    • 위 예제에서 person 객체에 일반 key인 weight와, Symbol key인 weight가 모두 저장됩니다.
    • Symbol로 저장한 데이터는 일반적인 for-in 반복문 등으로는 탐지되지 않습니다.
    • 즉, 민감한 정보나 시크릿 데이터를 저장할 때 유용하게 사용됩니다.

3️⃣ Symbol을 Object 리터럴에 직접 사용하기

  • 대괄호([]) 사용:
    var height = Symbol('내 키임');
    var person = {
      name: 'Kim',
      [height]: 160
    };
    
    • 객체를 정의할 때 대괄호 안에 Symbol을 넣으면 해당 Symbol이 key로 사용됩니다.

4️⃣ Symbol 자료형의 특징

4.1. 설명은 단지 라벨일 뿐

  • 고유성:
    var a = Symbol('설명1');
    var b = Symbol('설명1');
    console.log(a === b); // false
    
    • 동일한 설명을 가지고 있더라도 각각의 Symbol은 서로 다른 고유값을 가집니다.

4.2. 전역 심볼: Symbol.for()

  • 전역 심볼 생성:
    • Symbol.for()를 사용하면, 동일한 설명에 대해 이미 생성된 Symbol을 재사용할 수 있습니다.

      var a = Symbol.for('설명1');
      var b = Symbol.for('설명1');
      console.log(a === b); // true
      
    • 전역 심볼 레지스트리에 저장되어, 같은 설명을 가진 Symbol은 동일한 객체로 취급됩니다.

4.3. 기본 내장 Symbol들

  • 내장 심볼:
    • JavaScript의 내장 객체들(예: Array, Object)에는 숨겨진 Symbol key들이 존재합니다.
    • 예를 들어, 모든 배열에는 [Symbol.iterator] 심볼이 있어서 배열을 이터러블(iterable)하게 만듭니다.
  • 예제:
    var array = [2, 3, 4];
    console.log(array[Symbol.iterator]);
    
    • 이 심볼을 통해 for-of 문법 등 ES6 이터레이션 기능이 동작합니다.
    • 일반적인 반복문에서는 탐지되지 않으므로, '몰래' 데이터나 기능을 구현할 때 활용됩니다.

📌 정리

  • Symbol의 생성과 역할:
    • Symbol()을 사용해 고유한 식별자를 만들 수 있으며, 이를 Object의 key로 사용하면 기존 문자열 key와 충돌하지 않고 은닉성을 부여할 수 있습니다.
  • 특별한 사용법:
    • Symbol.for()를 사용하면 전역 심볼 레지스트리를 통해 같은 설명의 Symbol을 재사용할 수 있습니다.
    • 내장 Symbol들은 ES6의 여러 기능(예: 이터레이션)을 지원하는 데 중요한 역할을 합니다.
  • 활용 포인트:
    • 민감한 데이터나 내부적인 프로퍼티를 숨기고 싶을 때 Symbol 자료형을 사용하면 좋습니다.
    • 또한, ES6에서 추가된 여러 내장 Symbol들을 통해 객체의 동작을 확장할 수 있다는 점을 이해하면, JavaScript의 심도 있는 활용에 큰 도움이 됩니다.

0개의 댓글