-
9-3. JavaScript Symbol 자료형JavaScript 2023. 4. 7. 19:40
I. Symbol 이란?
다른 값과 절대 중복되지 않는 유일무이한 값
- 원시 타입
1. 기본 생성과 활용 (new 사용하지 않음)
const mySymbol = Symbol(); console.log(typeof mySymbol, mySymbol); // symbol Symbol()
2. 문자열 값을 인자로 줄 수 있음
- 해당 심벌에 대한 설명일 뿐, 각 심벌의 값은 유일무이
const symbol1 = Symbol('hello'); const symbol2 = Symbol('hello'); console.log(symbol1, symbol2); // Symbol(hello) Symbol(hello)
✨객체에서의 활용
객체의 키로 사용시 : [ , ] 로 감쌈
const obj = { [Symbol('x')]: 1, [Symbol('y')]: 2 } console.log(obj); // {Symbol(x): 1, Symbol(y): 2}
- 외부 접근을 제한할 프로퍼티의 키로 활용
const buildingKey = Symbol('secret'); const building = { name: '얄코사옥', floors: 3, [buildingKey]: '1234#' } console.log(building); // {name: '얄코사옥', floors: 3, Symbol(secret): '1234#'} console.log( building.name, building.floors, building[buildingKey] // 얄코사옥 3 1234# ); // 외부로부터의 접근 차단 console.log( building[Symbol('secret')] // undefined );
- 아래 방법들로는 접근되지 않음
for (key in building) { console.log(key); // name floor } console.log( Object.keys(building), // ['name', 'floors'] Object.values(building), // ['얄코사옥', 3] Object.entries(building), // [Array(2), Array(2)] Object.getOwnPropertyNames(building) // ['name', 'floors'] );
- 아래의 Object 정적 메서드로 접근 가능 (배열로 반환)
console.log( Object.getOwnPropertySymbols(building), // [Symbol(secret)] Object.getOwnPropertySymbols(building)[0], // Symbol(secret) ); console.log( building[ Object.getOwnPropertySymbols(building)[0] // 1234# ] );
II. 전역 심볼 레지스트리 (global symbol registry)
- 키가 중복되지 않는 심볼들이 저장되는 공간
1. Symbol의 정적 메서드들
① for : 주어진 인자로 전역 심볼 레지스트리에 하나의 심볼 생성 및 반환
// 전역 심볼 레지스트리에 해당 키로 등록된 키가 없을 시: // 심볼을 새로 생성 const symbol1 = Symbol.for('hello'); // 전역 심볼 레지스트리에 해당 키가 존재할 시: // 해당 심볼을 반환 const symbol2 = Symbol.for('hello'); console.log(symbol1 === symbol2); // true
② keyFor : 정적심볼 레지스트리에 저장된 심볼의 키 반환
console.log( Symbol.keyFor(symbol1), // hello Symbol.keyFor(symbol2) // hello );
✨표준 빌트인 객체에 직접 만든 메서드를 만들어 넣을 경우,
이후 버전의 자바스크립트에서 같은 이름으로 메서드가 추가되더라도
커스텀 메서드가 덮어씌워지지 않도록 하기 위한 용도로 쓰인다.
'JavaScript' 카테고리의 다른 글
10-2. JavaScript Map의 모든 것 (0) 2023.04.07 10-1. JavaScript Set의 모든 것 (0) 2023.04.07 9-2. JavaScript BigInt 자료형 (0) 2023.04.07 9-1. JavaScript 2진법, 8진법, 16진법과 비트 연산자 (0) 2023.04.07 8-3. JavaScript JSON의 모든 것 (0) 2023.04.07