자바스크립트 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"
정리
자바스크립트의 심볼은 객체 속성의 고유성을 보장하고 코드 충돌을 방지하는 데 유용한 원시 타입입니다. 심볼을 이해하고 사용하면 객체의 내부 상태를 보호하고 안전한 코드를 작성하는 데 도움이 됩니다. 이제 심볼의 개념을 확실히 이해했으니, 자바스크립트 프로젝트에서 심볼을 사용하여 견고한 코드를 작성해 보세요.
'Language > Javascript' 카테고리의 다른 글
Javascript - 실행컨텍스트 완벽하게 이해하기 (0) | 2023.04.07 |
---|---|
Javascript - 비동기 프로그래밍 완벽하게 이해하기 (0) | 2023.04.07 |
Javascript - 데이터타입 완벽하게 이해하기 (0) | 2023.04.04 |
Javascript - 자바스크립트 특징 완벽정리 (0) | 2023.04.04 |
Javascript - Scope 완벽하게 이해하기 (0) | 2023.04.04 |