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
이 있으며 기존 메서드의 동작을 각 객체에 따라 다르게 동작할 수 있도록 할 수 있다.