본문 바로가기
Language/Javascript

Javascript - Symbol(심볼) 타입 완벽하게 이해하기

by 아보_ 2023. 4. 5.
반응형

자바스크립트 Symbol 타입 완벽하게 이해하기

 

자바스크립트는 원시 데이터 타입 중 하나로 심볼(Symbol) 타입을 갖습니다. 심볼은 ECMAScript 2015 (ES6)에서 도입되어 코드 내에서 유일한 식별자를 생성하는 데 사용되는 데이터 타입입니다. 이 블로그 글에서는 심볼의 개념과 생성, 사용법 및 심볼을 사용한 다양한 예제를 제공하여 자바스크립트에서 심볼의 이해를 돕겠습니다.

 

1.  심볼이란 무엇인가?

심볼은 고유하고 변경 불가능한 원시 타입입니다. 심볼은 다른 모든 원시 타입과 달리 설명 문자열을 선택적으로 포함할 수 있습니다. 이는 디버깅 목적으로 유용하지만, 생성된 심볼의 유일성에 영향을 주지는 않습니다.

심볼을 생성하려면 Symbol() 함수를 사용합니다. 함수에는 선택적으로 설명 문자열을 전달할 있습니다.

const symbol1 = Symbol();
const symbol2 = Symbol("description");
console.log(typeof symbol1); // "symbol"
console.log(typeof symbol2); // "symbol"

 

2.  심볼의 사용법

심볼은 주로 객체의 속성 키로 사용됩니다. 이를 통해 객체의 속성을 고유하게 만들어 충돌을 방지할 수 있습니다. 심볼로 만든 속성은 for...in 루프 또는 Object.keys()와 같은 메서드로 열거할 수 없습니다. 이는 심볼을 사용하여 객체의 속성을 숨길 수 있다는 장점을 제공합니다.

 

심볼을 속성 키로 사용하기

심볼을 객체의 속성 키로 사용하려면 대괄호 표기법을 사용해야 합니다. 이를 통해 고유한 속성을 만들 있습니다.

const id = Symbol("id");
const user = {
  name: "Alice",
  [id]: 1,
};

console.log(user[id]); // 1

 

 

심볼 속성 열거하지 않기

심볼 속성은 for...in 루프 또는 Object.keys() 같은 메서드로 열거할 없습니다. 이는 심볼 속성을 외부에서 접근하기 어렵게 만들어 객체의 내부 상태를 보호하는 도움이 됩니다.

const secret = Symbol("secret");
const data = {
  value: 42,
  [secret]: "hidden value",
};

for (const key in data) {
  console.log(key); // "value"
}

console.log(Object.keys(data)); // ["value"]

 

심볼 속성에 접근하기

심볼 속성에 접근하려면 Object.getOwnPropertySymbols() 함수를 사용하여 객체의 모든 심볼 속성을 가져올 있습니다.

const secretSymbols = Object.getOwnPropertySymbols(data);
console.log(secretSymbols); // [Symbol(secret)]
console.log(data[secretSymbols[0]]); // "hidden value"

 

3.  전역 심볼 레지스트리

전역 심볼 레지스트리는 프로그램 전체에서 사용할 있는 심볼을 저장하는 특수한 공간입니다. Symbol.for() 함수를 사용하여 전역 심볼을 생성하거나 가져올 있습니다. 함수는 레지스트리에 동일한 설명을 가진 심볼이 있는지 확인한 다음, 있으면 해당 심볼을 반환하고 없으면 새로운 심볼을 생성합니다.

const globalSymbol1 = Symbol.for("global");
const globalSymbol2 = Symbol.for("global");

console.log(globalSymbol1 === globalSymbol2); // true

 

전역 심볼의 설명을 얻으려면 Symbol.keyFor() 함수를 사용할 있습니다.

console.log(Symbol.keyFor(globalSymbol1)); // "global"

 

정리

자바스크립트의 심볼은 객체 속성의 고유성을 보장하고 코드 충돌을 방지하는 데 유용한 원시 타입입니다. 심볼을 이해하고 사용하면 객체의 내부 상태를 보호하고 안전한 코드를 작성하는 데 도움이 됩니다. 이제 심볼의 개념을 확실히 이해했으니, 자바스크립트 프로젝트에서 심볼을 사용하여 견고한 코드를 작성해 보세요.
반응형