[JS] Symbol

2022. 6. 9. 12:40coding tutorial/Java Script

Symbol 형은 유일한 식별자이다. 전체 코드 중 딱 하나라는 의미로 유일성이 보장됨.

내용이 일치해도 일치연산자(===), 동등 연산차(==) 로 확인해보면 false.

 

Symbol(); 

- 괄호 안에 '문자열'을 넣어 설명을 붙일 수도 있으며 이는 디버깅 할 때 편함. 심볼 생성에는 어떠한 영향도 미치지 않음. 위와 같이 설명이 같아도 다른 값으로 뜸.

- Object.keys(), Object.values(), Object.entries() 등의 메소드나 for(.. in ..) 문은 Symbol형인 프로퍼티는 건너 뛴다.

 

이와 같은 특성을 이용하여 특정 개체의 원본 데이터는 건드리지 않고 속성을 추가할 수 있다.

타인이 만든 객체에 자신의 속성을 추가하여 덮어쓰면 안되므로..

 

가끔 전역변수처럼 이름이 같으면 같은 객체를 가르켜야할 때가 있음. 이때 사용하는 것이 '전역심볼'.

 

Symbol.for() : 전역 심볼

- 하나의 심볼만 보장받을 수 있음

- 없으면 만들고, 있으면 가져오기 때문이다.

- Symbol 함수는 매번 다른 Symbol 값을 생성하지만, Symbol.for 메소드는 하나를 생성한 뒤 키를 통해 같은 Symbol을 공유.

 

Symbol.keyFor(전역심볼) : 전역 심볼 이름을 불러오는 메서드

심볼변수.description : 전역 심볼이 아닌 심볼은 keyFor을 사용할 수 없다. 대신 dscription 메서드를 사용하여 이름을 알 수 있다.

 

숨겨진 Symbol key 보는 법

Object.getOwnPropertySymbols(변수); : 심볼 찾기

Reflect.ownKeys(변수); : 객체 프로퍼티 중 심볼을 포함한 모든 키 찾기

 

실습 EX) 타인이 만든 객체 user에 showName이라는 심볼을 추가하기.

 ㄴ 타인이 만든 코드에 영향을 미치지 않으며 메서드를 추가. 

 ㄴ user 객체에 이런 이름의 메서드가 있었는지 고민할 필요가 없으며 다른 사람이 만들어놓은 프로퍼티를 덮어쓸 일도 없음.