JavaScript(Symbol)

2487 단어 JavaScriptJavaScript

Symbol

심볼은 변경 불가능한 원시(Primitive)타입의 값이며, 다른 값과 중복되지 않는 고유한 값이다.
심볼 값은 충돌 위험이 없는 오브젝트의 유일한 프로퍼티(속성) 키를 만들기 위해서 사용 가능.
즉, 오브젝트자료형에 비밀스러운 key값을 부여하고 싶을 때 사용.

Symbol()함수를 이용

var person = { name : 'Kim' };
person.weight = 100; //일반적인 오브젝트에 속성값 저장
var weight = Symbol('내 진짜 몸무게'); //심볼형 저장
person[weight] = 200; //대괄호 속 변수값 작성
console.log(person);

오브젝트 속 직접 입력 가능

var person = { name : 'Kim', [weight] : 200 };

위의 코드에서는 Symbol을 key값, 200을 value값으로 오브젝트에 저장하는 것이다.
따라서, 출력 시 { Symbol(내 진짜 몸무게) : 200 }처럼 출력되는 것을 확인 가능.

for in을 통한 확인 가능

for(var key in person){
    console.log(person[key]); person객체 내 value 값 출력!
}

Symbol 특징1

같은 설명을 가졌다고 해서 같은 Symbol이 아니다.

var a = Symbol('설명1');
var b = Symbol('설명1');
console.log(a === b); //false 

위의 예제에서는 a,b 모두 같은 '설명1'이라는 설명을 가지고 있지만, false 값이 출력.
Symbol은 Symbol()함수를 사용하면 각각 유니크한 Symbol이 생성되기 때문.

Symbol 특징2

만약 변수와 같이 같은 값을 가지면 같은 변수로 취급하듯이 심볼값을 설정하고 싶다면?

Symbol() 대신에 Symbol.for()을 사용하여 전역심볼을 만들면 된다.

var a = Symbol.for('설명1'); //전역심볼 생성
var b = Symbol.for('설명1'); 이미 a변수에 같은 값 존재
console.log(a === b); //true

위와 예제에서는 a변수에 Symbol.for함수를 사용하여 설명값을 저장하였고, b변수에 값은 설명값을 저장할때 이미 그 설명을 가지고 있는 Symbol이 존재한다고 판단한다.
따라서 a와 b는 각각 다른 위치에서 심볼을 생성했지만, 같은 Symbol값을 가지게 된다.

Symbol 자료형 특징3

Array, Object 자료형을 생성할때 몰래 붙어있는 기본 Symbol들이 존재한다.

var array = [2,3,4];
console.log(array[Symbol.iterator]());

Symbol.iterator는 for...of를 사용가능하게 하는 Symbol
iterable protocol 은 JavaScript 객체들이, 예를 들어 for..of 구조에서 어떠한 value 들이 loop 되는 것과 같은 iteration 동작을 정의하거나 사용자 정의하는 것을 허용.

ES6환경에선 이런식으로 내장기능이 존재하는구나 정도로면 이해하고 있자.

좋은 웹페이지 즐겨찾기