TypeScript 핸드북 11 - Symbol

Symbols

소개

ECMAScript 2015부터 symbolnumberstring처럼 Primitive 데이터 타입입니다.

symbol 값은 Symbol 생성자를 호출하여 생성됩니다.

1
2
3
let sym1 = Symbol();
let sym2 = Symbol("key"); // string "key"는 optional입니다.

Symbol은 변경 불가능하며 고유합니다.

1
2
3
4
let sym2 = Symbol("key");
let sym3 = Symbol("key");
sym2 === sym3; // false, symbols are unique

string과 마찬가지로 symbol을 객체 프로퍼티의 키로 사용할 수 있습니다.

1
2
3
4
5
6
7
let sym = Symbol();
let obj = {
[sym]: "value"
};
console.log(obj[sym]); // "value"

Symbol을 계산된 프로퍼티 선언과 결합하여 객체 프로퍼티와 클래스 멤버를 선언할 수도 있습니다.

1
2
3
4
5
6
7
8
9
10
const getClassNameSymbol = Symbol();
class C {
[getClassNameSymbol](){
return "C";
}
}
let c = new C();
let className = c[getClassNameSymbol](); // "C"

잘 알려진 Symbol

사용자 정의 Symbol 외에도 잘 알려진 내장 Symbol이 있습니다. 내장 Symbol는 언어 내부 동작을 나타내는 데 사용됩니다.

다음은 잘 알려진 Symbol 목록입니다.

Symbol.hasInstance

생성자 객체가 생성자의 인스턴스 중 하나로서 객체를 인식하는지 여부를 결정하는 메서드입니다. instanceof 연산자의 의미에 의해 호출됩니다.

Symbol.isConcatSpreadable

객체가 Array.prototype.concat에 의해 배열 요소로 병합되어야 함을 나타내는 부울 값입니다.

Symbol.iterator

객체의 기본 반복자를 반환하는 메서드입니다. for-of 구문의 의미에 의해 호출됩니다.

Symbol.match

문자열과 비교하는 정규 표현식 메서드입니다. String.prototype.match 메서드에 의해 호출됩니다.

Symbol.replace

일치하는 문자열의 부분 문자열을 대체하는 정규 표현식 메서드입니다. String.prototype.replace 메서드에 의해 호출됩니다.

일치하는 문자열 내에서 인덱스를 반환하는 정규 표현식 메서드입니다. String.prototype.search 메서드에 의해 호출됩니다.

Symbol.species

파생된 객체를 만드는 데 사용되는 생성자 함수의 함수값을 갖는 프로퍼티입니다.

Symbol.split

일치하는 인덱스에서 문자열을 분할하는 정규 표현식 메서드입니다. String.prototype.split 메서드에 의해 호출됩니다.

Symbol.toPrimitive

객체에 대응하는 Primitive로 변환하는 메소드입니다. ToPrimitive 추상 동작에 의해 호출됩니다.

Symbol.toStringTag

객체의 기본 문자열 Tag를 만드는데 사용되는 String 값입니다. 내장 메소드 Object.prototype.toString에 의해 호출됩니다.

Symbol.unscopables

자신의 프로퍼티 명을 가지는 객체는 관련된 객체의 ‘with’ 환경 바인딩에서 제외되는 속성 이름입니다.


이 내용은 나중에 참고하기 위해 제가 공부하며 정리한 내용입니다.
의역, 오역, 직역이 있을 수 있음을 알려드립니다.
This post is a translation of this original article [https://www.typescriptlang.org/docs/handbook/symbols.html]

참고

공유하기