반응형
symbol
symbol(심벌)은 ES2015에 새로 추가된 기능입니다.
실무에선 자주 사용하지 않는 편이며 객체와 맵에서 문자열 키를 대신하는 용도로 사용합니다.
symbol 키를 사용하면, 사람들이 잘 알려진 키만 사용하도록 강제할 수 있으므로 키를 잘못 설정하는 실수를 방지합니다.
객체의 기본 반복자(Symbol.iterator)를 설정하거나 객체가 어떤 인스턴스인지(Symbol.hasInstance)를 런타임에 오버라이딩 하는 것과 비슷한 기능을 제공합니다.
symbol 타입으로는 할 수 있는 동작이 별로 없습니다:(
let a = Symbol('a'); // symbol
let b: symbol = Symbol('b'); // symbol
var c = a === b; // boolean
let d = a + 'x'; // error TS2469: '+' 연산을 'symbol' 타입에 적용할 수 없음
JavaScript에서 Symbol('a')는 주어진 이름으로 새로운 symbol을 만든다는 의미입니다. 프리미티브 타입의 값을 담아서 사용합니다. (단, new Symbol로 사용할 수 없습니다.)
만들어진 symbol은 고유하고 수정 불가능하기 때문에 다른 symbol과 == 또는 ===로 비교했을 때, 같지 않다고 판단됩니다. (같은 이름으로 다른 symbol을 만들어도 마찬가지입니다.) 그래서 주로 접근을 제어하는데 쓰는 경우가 많습니다.
symbol도 symbol 타입으로 추론되거나 아니면 명시적으로 unique symbol을 정의할 수 있습니다.
const e = Symbol('e'); // typeof e
const f: unique symbol = Symbol('f'); //typeof f
let g: unique symbol = Symbol('f'); // error TS1332: 'unique symbol' 타입은 반드시 const 여야 합니다.
let h = e === e; // boolean
let i = e === f; // error TS2367: 'unique symbol' 타입은 서로 겹치는 일이 없으므로 이 비교문의 결과는 항상 'false'입니다.
unique symbol
- 새 symbol을 선언하고 const 변수에 할당하면, TypeScript가 unique symbol 타입으로 추론합니다. (코드 편집기에선 unique symbol이 아니라 'typeof 변수명' 형태로 보여줄 것입니다.)
- const 변수의 타입을 unique symbol로 명시적으로 정의합니다.
- unique symbol은 자신과 항상 같습니다.
- TypeScript는 컴파일 타임에 unique symbol이 다른 unique symbol과 같지 않을 것이라는 사실을 알 수 있습니다.
unique symbol도 결국 1, true, "literal" 등 다른 리터럴 타입과 마찬가지로 특정 symbol을 나타내는 타입입니다.
반응형
'👶 TypeScript' 카테고리의 다른 글
객체(Object) (0) | 2023.01.07 |
---|---|
null & undefined (0) | 2023.01.07 |
string (0) | 2023.01.07 |
number (0) | 2023.01.07 |
boolean (0) | 2023.01.06 |