일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 개발 환경 구축
- js
- 클로저
- Ref로 값 참조하기
- BETA
- ES6 함수의 추가 기능
- Ref로 DOM 다루기
- 브라우저의 렌더링 과정
- 비동기 프로그래밍
- 싸피
- REACT
- 에러 처리
- rest api
- 프로미스
- async
- await
- 제너레이터
- 데이터 타입
- Deep Dive
- Set과 Map
- 이터러블
- Strict Mode
- 표현식과 문
- DEEPDIVE
- Escape Hatches
- 스프레드 문법
- 모듈
- 배열
- 디스트럭처링 할당
- 코어JS
- Today
- Total
코딩을 쉽게 해보자
[Deep Dive] 33장 - 7번째 데이터 타입 Symbol 본문
1. 심벌이란?
ES6에서 도입된 7번째 데이터 타입
변경 불가능한 원시 타입의 값
다른 값과 중복되지 않는 유일무이한 값
주로 이름의 충돌 위험이 없는 유일한 프로퍼티 키를 만들기 위해 사용한다.
프로퍼티 키로 사용할 수 있는 값은 빈 문자열을 포함하는 모든 문자열 또는 심벌 값이다.
2. 심벌 값의 생성
2-1. Symbol 함수
외부로 노출되지 않아 확인할 수 없으며,
다른 값과 절대 중복되지 않는 유일무이한 값
new 연산자와 함께 호출 x
Symbol 함수에는 선택적으로 문자열을 인수로 전달할 수 있다.
설명으로 디버깅 용도로만 사용되며, 값 생성에 어떠한 영향 X
심벌 값에 대한 설명이 같더라도 생성된 심벌 값은 유일무이한 값이다.
2-2. Symbol.for / Symbol.keyFor 메서드
Symbol.for 메서드는
인수로 전달받은 문자열을 키로 사용하여
키와 심벌 값의 쌍들이 저장되어 있는 전역 심벌 레지스트리에서 해당 키와 일치하는 심벌 값을 검색한다.
Symbol.keyFor 메서드는
전역 심벌 레지스트리에 저장된 심벌 값의 키를 추출할 수 있다.
3. 심벌과 상수
4방향을 타나내는 상수를 일반적인 숫자로 나타냈을 경우 변경될 수 있으며 다른 변수값과 중복될 수도 있다.
이럴때는 변경/중복될 가능성이 있는 무의미한 상수 대신
중복될 가능성이 없는 유일무이한 심벌 값을 사용할 수 있다.
const Direction = {
UP: Symbol("up"),
DOWN: Symbol("down"),
LEFT: Symbol("left"),
RIGHT: Symbol("right"),
};
const myDirection = Direction.UP;
if (myDirection === Direction.UP) console.log("You are going UP"); // 출력됨
4. 심벌과 프로퍼티 키
심벌 값을 프로퍼티 키로 사용하려면
프로퍼티 키로 사용할 심벌 값에 대괄호를 사용해야 한다.
심벌 값은 유일무이한 값이므로 심벌 값으로 프로퍼티 키를 만들면 다른 프로퍼티 키와 절대 충돌하지 않는다.
5. 심벌과 프로퍼티 은닉
심벌 값을 프로퍼티 키로 사용하여 생성한 프로퍼티는
for..in 문이나 Object.keys, Object.getOwnPropertyNames 메서드로 찾을 수 없다.
하지만
ES6에서 도입된 Object.getOwnPropertySymbol 메서드를 사용하면 찾을 수 있다.
6. 심벌과 표준 빌트인 객체 확장
표준 빌트인 객체는 읽기 전용으로 사용하는 것이 좋다.
중복될 가능성이 없는 심벌 값으로 프로퍼티 키를 생성하여
표준 빌트인 객체를 확장하면
표준 빌트인 객체의 기존 프로퍼티 키와 충돌하지 않는다.
7. Well-known Symbol
JS가 기본 제공하는 빌트인 심벌 값이 있다.
이를 Well-Known Symbol이라 부른다.
'JavaScript' 카테고리의 다른 글
[Deep Dive] 35장 - 스프레드 문법 (0) | 2022.12.31 |
---|---|
[Deep Dive] 34장 - 이터러블 (0) | 2022.12.29 |
[Deep Dive] 32장 - String (0) | 2022.12.25 |
[Deep Dive] 31장 - RegExp (1) | 2022.12.24 |
[Deep Dive] 30장 - Date (0) | 2022.12.24 |