javascript- Symbol

현우.·2024년 6월 18일

JavaScript

목록 보기
18/31
post-thumbnail

Symbol

Symbol은 원시타입중에 하나로 유일한 키를 생성할 때 사용한다.

  • 심볼은 객체에 속성을 추가할 때 고유한 키를 부여하여 다른 코드와 충돌하지 않도록 할 때 많이 쓰인다.
  • 따라서 캡슐화, 정보 은닉을 제공한다.
  • Symbol() 호출은 각각 고유한 심볼을 반환하는 것이 보장된다.

Symbol 생성

Symbol은 생성자 함수로 생성한다. 그러나 new 연산자는 사용하지 않는다.

const blackBear = Symbol("bear"); 
const whiteBear = Symbol("bear");
console.log(blackBear===whiteBear); // false

const map =new Map();
map.set(blackBear,"Big"); // value값 Big으로 설정
console.log(map.get(blackBear)); // Big
console.log(map.get(whiteBear)); // undefined
  • bear라는 고유한 키값을 가진 Symbol 객체 각각 생성
  • blackBear와 whitebear는 서로 다름을 확인 할 수 있다.

Symbol 정적 메소드

Symbol.for(key)

인자로 전달받은 키를 Symbol값들이 저장되어있는 전역 심볼 레지스트리에서 해당 키와 일치하는 저장된 Symbol값을 검색한다.

  • Symbol.for(key)를 호출했을 때, 주어진 키를 가진 심볼이 전역 심볼 레지스트리에 존재하면 그 심볼을 반환한다.
    심볼이 없으면 새로 생성하고, 전역 심볼 레지스트리에 등록한 후, 반환한다.
  • 하나의 Symbol을 생성하여 여러 모듈이 키를 통해 같은 Symbol을 공유할 수 있다.
   const blackBear2=  Symbol.for('bear');
// Symbol registry에 key라는 이름을 가진 키를 가져오고 없다면 생성
   const whiteBear2=  Symbol.for('bear');
// Symbol registry에서 key라는 이름이 있으므로 그 키 를 가져와 사용
   console.log(blackBear2===whiteBear2); // true

Symbol은 코드내 보안을 주고 싶을 때 사용할 수 있다.

const blackBear2=  Symbol.for('bear');
const whiteBear2=  Symbol.for('bear');

const obj ={
    [blackBear2] : "Big",
    [Symbol('bear')]: "small" // 보안을 주기위해 사용
} 
console.log(obj); // { [Symbol(bear)]: 'Big', [Symbol(bear)]: 'small' }

console.log(obj[blackBear2]); // Big
console.log(obj[whiteBear2]); // Big , registry에서 같은 키 공유

console.log(obj[Symbol('bear')]); //  undefined
//obj안의 [Symbol('key')]과  출력하고자 하는 [Symbol('key')]는 전혀 다른 키이므로

Symbol.keyFor(key)

심볼이 가진 키(문자열) 정보를 출력한다.

const blackBear=  Symbol.for('bear');
const whiteBear=  Symbol.for('bear');

console.log(Symbol.keyFor(blackBear)); // bear
profile
학습 기록.

0개의 댓글