JS - Symbol 간략 정리


JS의 타입 중 하나인 Symbol에 대한 간단 정리

Symbol

작성자에게는 평소에 사용하는 일이 없는 타입이지만 JS의 타입 중 하나이다.
유일한 값임을 보장해주는 타입이다. 어떤 값인지는 확인을 할 수가 없다. (현재 내 지식으로는)

const sym = Symbol("test");

console.log(sym); // Symbol(test);

심볼타입을 생성하면 위와 같이 확인을 할 수가 있으며 정확한 원시값의 확인은 불가하다.
보통 프로퍼티의 속성 키로 사용을 하며, 유일한 값을 값을 보장 받아 추후 스펙 변경등에 의한 오버라이딩을 방지할 수 있다.

Well-Known Symbols

Symbol에서 제공하는 기존 메서드를 오버라이딩 할 수 있는 기능이다.

const arr1 = [1, 2];
const arr2 = [3, 4];

const testConcat = () => {
  console.log(arr1.concat(arr2));
};

testConcat(); // [1, 2, 3, 4]
arr2[Symbol.isConcatSpreadable] = true;
testConcat(); // [1, 2, 3, 4]
arr2[Symbol.isConcatSpreadable] = false;
testConcat(); // [1, 2, [3, 4]]

이와 같이 본래 Array를 concat 하면 1번째와 같이 요소를 전개하여 반환한다. 하지만 Symbol.isConcatSpreadable의 설정을 변경하므로 인해 전개하지 않도록 동작하도록 할 수 있다.
이와 같은 더 다양한 Well-Known Symbols이 있으며 기존 메서드의 동작을 각 객체에 따라 다르게 동작할 수 있도록 할 수 있다.

Tags:

Categories:

Updated: