
Symbol ?
: ES6에서 추가된 원시 타입
: 유니크한 식별자를 생성하기 위한 목적

Symbol()으로 Symbol 타입 생성
유니크한 식별자 위해 사용되는 것이기에 각 Symbol 내부는 다른 값을 가짐
description

: Symbol 값이 어떤 심볼인지 알 수 있게 해줌
: 디버깅 시 사용 가능. description이 없다면 어떤 심볼인지 알기 어려움
장점
: 특정 객체에 프로퍼티와 값을 주려고 할 때 유용
: 객체 내 특정 프로퍼티와 겹쳐서 오버라이드 될 가능성 방지

carA 객체 내 어떤 프로퍼티가 있는지 모르는 상황

id라는 프로퍼티로 300값을 주고 싶어 넣다가

이미 부여된 id와 겹쳐서 오버라이드 되는 상황 발생
해결 방법 (Symbol)

따로 Symbol 타입 생성하여 객체에 값과 함께 넣는다면

Symbol 타입으로 유니크한 id속성과 해당 값이 들어가는 것을 확인
제외 사항
심볼은 기본적으로 프로퍼티가 숨겨지게 됨
2 가지 경우에서는 프로퍼티 안보이는 상황 발생
1. for...in


객체 내 반복으로 프로퍼티 탐색할 때 symbol은 안나타나는 것을 확인
2. getOwnPropertyNames
: 전달된 객체의 모든 속성들을 배열로 반환


symbol만 안나타나는것을 확인
해결 -> getOwnPropertySymbols 이용


해당 메소드로 객체 내 symbol타입 프로퍼티 추출하는 것을 확인
전역 심볼 : Symbol.for()

: 기본 심볼로 값 생성 시 description이 같더라도 다 다른 값 가짐
: Symbol.for() 이용 시 description 가졌을 때 같은 값 가짐
Symbol.keyFor()

: Symbol.for로 전역 심볼 만들 때 사용하는 description 얻을 수 있는 함수
Symbol 활용

보통 Symbol 타입이 아니였다면 BlUE와 dog 둘다 switch문에서 BLUE 사항에 들어가 같은 출력문 반환
Symbol 형태로 구분하여 dog를 구분 처리 가능

보통 콘솔에 반환되어 출력되는 값 중 length에 대한 값도 나올 것
하지만 Symbol타입으로 해줌으로써 숨길 수 있음