[JS] 심볼형

yuyeong·2024년 11월 20일

JS

목록 보기
7/10
post-thumbnail

심볼(Symbol)유일한 식별자(unique identifier)를 생성하기 위한 데이터 타입이다. 심볼은 객체 프로퍼티 키로 사용할 수 있는 특별한 형식이며, 문자형과 함께 유일하게 프로퍼티 키로 사용할 수 있다.


1. 심볼(Symbol)이란?

심볼 생성

  • Symbol()을 호출해 심볼을 생성한다.
  • 선택적으로 설명(description)을 추가할 수 있다.
let id = Symbol("id"); // 설명이 "id"인 심볼 생성

심볼은 유일하다

  • 설명이 동일하더라도 생성된 심볼은 서로 다르다.
let id1 = Symbol("id");
let id2 = Symbol("id");
console.log(id1 === id2); // false

2. 심볼의 특징

문자형으로 변환되지 않음

  • 심볼은 암시적으로 문자형으로 변환되지 않는다.
let id = Symbol("id");
console.log(id); // TypeError: Cannot convert a Symbol value to a string
  • .toString()이나 .description을 사용해 출력 가능:
console.log(id.toString()); // Symbol(id)
console.log(id.description); // id

숨김 프로퍼티 생성

심볼을 사용하면 객체에 외부에서 접근 불가능한 프로퍼티를 추가할 수 있다.

let user = { name: "John" };
let id = Symbol("id");
user[id] = 123;

console.log(user[id]); // 123
console.log(user["id"]); // undefined (심볼은 접근 불가능)

3. 객체 리터럴에서 심볼 사용

  • 심볼 키를 객체 리터럴에 추가하려면 대괄호([])를 사용한다.
let id = Symbol("id");
let user = {
  name: "John",
  [id]: 123 // 심볼 키 추가
};

4. 심볼과 반복문

  • 심볼 키는 for...inObject.keys()에서 제외된다.
let id = Symbol("id");
let user = {
  name: "John",
  [id]: 123
};

for (let key in user) {
  console.log(key); // "name"만 출력
}

console.log(Object.keys(user)); // ["name"]
  • Object.assign()은 심볼 키를 포함한 모든 프로퍼티를 복사한다.
let clone = Object.assign({}, user);
console.log(clone[id]); // 123

5. 전역 심볼 (Global Symbol)

전역 심볼 레지스트리

  • Symbol.for(key)를 사용해 전역 심볼을 생성하거나 검색한다.
let id = Symbol.for("id"); // "id" 심볼 생성
let idAgain = Symbol.for("id"); // 동일한 심볼 반환

console.log(id === idAgain); // true

Symbol.keyFor

  • 전역 심볼의 이름을 가져온다.
let id = Symbol.for("id");
console.log(Symbol.keyFor(id)); // "id"

일반 심볼과의 차이

  • 전역 심볼이 아닌 경우 Symbol.keyForundefined를 반환한다.
let localSymbol = Symbol("local");
console.log(Symbol.keyFor(localSymbol)); // undefined
  • 대신 .description으로 설명을 확인할 수 있다.
console.log(localSymbol.description); // "local"

6. 시스템 심볼

  • 시스템 심볼은 자바스크립트 내부에서 사용되며, 객체의 동작을 조정할 수 있다.
  • 예시:
    • Symbol.iterator: 객체의 반복 가능성을 정의.
    • Symbol.toPrimitive: 객체의 원시 값 변환 방식을 정의.
    • 기타: Symbol.hasInstance, Symbol.isConcatSpreadable, Symbol.match 등.

요약

  1. 심볼의 생성: Symbol()로 생성하며, 설명을 추가할 수 있다.
  2. 유일성 보장: 동일한 설명을 가진 심볼이라도 서로 다르다.
  3. 객체 프로퍼티 키: 문자형 키와 함께 사용할 수 있으며, 숨김 프로퍼티로 활용 가능.
  4. 전역 심볼: Symbol.for()를 통해 이름이 같은 심볼을 공유할 수 있다.
  5. 반복문 제외: for...inObject.keys()에서 제외되지만, Object.assign()은 포함.
  6. 시스템 심볼: 자바스크립트 기본 동작을 조정하기 위한 특수 심볼.

심볼은 주로 숨김 프로퍼티를 만들거나 고유한 식별자를 생성하기 위해 사용된다.

profile
이겨내

0개의 댓글