Symbol의 정의

Symbol은 고유한 값을 갖고 원시타입인 symbol를 rerturn하는 built-in 객체이다.

Symbol의 특징

이 같은 특징을 활용하면 encapsulation과 information hiding을 하는데 활용할 수 있다.

활용

충돌하지 않는 고유한 값을 갖는 특성의 활용

Enum으로서 활용가능하다.

const COLOR = Object.freeze({
	RED: Symbol("red"),
	BLUE: Symbol("blue"),
	GREEN Symbol("green"),
})

const UP = Symbol("up");

이와 같이 COLORRED값은 symbol이고 고유한 값을 갖기 때문에 어떠한 외부 코드에도 영향을 받지 않게 된다.

표준 객체의 하위 호환성을 보장하며 확장하기 위해 사용한다.

ES6이전 객체 슬롯에는 [[Class]] 내부 슬롯을 가지고 있어서 toString을 조회하면 내부 슬롯 값을 출력했다. 하지만 ES6이후에는 well-known symbolSymbol.toStringTag를 출력하게 된다.

const obj = {
    get [Symbol.toStringTag]() {
            return 'hi'
        }
}
console.log(Object.prototype.toString.call(obj))  // [object hi]

접근하기 어렵다는 특성의 활용

프로퍼티 은닉에 활용가능하다.

symbolfor ... in구문이나 Object.hasOwnProperty와 같은 메서드에 나오지 않는다. 이 같은 특성을 이용해 메타데이터를 생성하는데 사용하게 된다. (Object.getOwnPropertySymbols로 조회 가능)