심볼은 ES2015에서 추가된 새로운 데이터 형입니다.
1. Symbol
심볼(Symbol)은 상징의 뜻을 가지고 있습니다. 흔히 이메일에 사용되는 @(a.k.a 골뱅이라고 하는 at Sign, 의미는 ~에서, 에게)가 대표적인 상징입니다.
이처럼 Symbol 형이란 어떤 값에 식별되는 유일한 이름을 붙이기 위해서 사용합니다. 우리가 문자열에 @가 존재한다면 아 이게 메일 주소일 확률이 높구나 하고 추정하거나, 길을 가다가 어떤 건물에 편지봉투가 있다면 아 여기는 우체국이겠구나 하고 알아 볼 수 있는 것 처럼, 어떤 값에 식별이 가능한 값을 주어 알아볼 수 있도록 하는 데이터 형입니다.
심볼형은 다음과 같이 Symbol()을 통해 만들어집니다. 생성자가 아니므로 앞에 new가 오지 않는 점이 여태까지의 다른 데이터 형과는 차이점을 가집니다. 심볼 명령에 인수로 심볼 설명을 붙일 수 있게 되어있는데, 이 설명은 생략이 가능합니다.
let 변수 = Symbol(심볼 설명);
let symbol1 = Symbol();
2. 심볼형의 주의점
심볼 설명이 같다면, 같은 심볼이라고 생각할 수 있겠지만 아닙니다. 인수로 전달된 설명이 같아도 개별로 선언된 심볼형 변수는 서로 다른 것으로 취급이 됩니다.
let symbol1 = Symbol('hi symbol');
let symbol2 = Symbol('hi symbol');
console.log(symbol1 === symbol2); //false
결과가 false가 나왔습니다. 위의 코드에서 'hi symbol'이라는 설명을 가진 심볼이 두 개가 생성된 것 입니다.
또 다른 주의점은 심볼은 다른 변수처럼 문자열/숫자형의 변환이 불가능 합니다.
let symbol = Symbol();
console.log(symbol + ''); //에러
console.log(symbol + 0); //에러
하지만 boolean형으로의 변환은 가능합니다.
let symbol = Symbol();
console.log(!symbol); //false
console.log(typeof !symbol); //boolean
3. 심볼형의 사용
그래서 이제 심볼이 고유한 것을 만들어내기 위해 사용하겠다는 것과 주의점도 알았는데 어떻게 사용해야할까요?
심볼의 첫 번째 사용처는 private 멤버입니다. Symbol을 통해 생성한 값은 고유한 값이기 때문에 private 멤버처럼 이용할 수 있습니다. 하지만 이것은 프로토타입에서 이야기이고, ES2019에서 class 명령을 이용한 클래스에는 #을 통한 private 멤버를 지원하고 있습니다.
심볼의 두 번째 사용처는 반복자를 정의하기 위해서 사용됩니다. 반복자가 무엇인지에 대해서는 다음 포스트에서 이어서 소개해드리겠습니다.
참조
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Symbol
'Programming > Javascript' 카테고리의 다른 글
[Javascript] 자바스크립트 테스트 도구 Jasmine (0) | 2022.01.12 |
---|---|
[Javascript] Iterator(반복자), Generator(발생자) (0) | 2022.01.11 |
[Javascript] numeric separators (0) | 2022.01.06 |
[Javascript] optional chainning ?. (0) | 2021.11.24 |
[Javascript] shorthand property names (0) | 2021.11.24 |
댓글