반응형
JavaScript의 Symbol
JavaScript의 Symbol
은 ES6(ECMAScript 2015)에서 도입된 원시 데이터 타입 중 하나로, 고유하고 변경 불가능한 값을 생성하는 데 사용됩니다. Symbol
은 객체 속성의 키로 주로 사용되며, 이를 통해 속성 이름 충돌의 위험 없이 객체에 메타-데이터를 추가할 수 있습니다.
Symbol의 주요 특징
- 고유성: 각
Symbol
값은 고유합니다. 같은 설명을 가진 두Symbol
을 생성해도, 두Symbol
은 서로 다릅니다. let symbol1 = Symbol("description"); let symbol2 = Symbol("description"); console.log(symbol1 === symbol2); // false
- 익명성:
Symbol
로 생성된 속성 이름은 for-in 루프나Object.keys()
등의 메서드로는 접근할 수 없으며, 따라서 객체 내부를 숨기는 데 유용합니다. 속성을 완전히 숨기지는 않지만, 일반적인 방법으로는 접근하기 어렵습니다. let obj = { [Symbol("hidden")]: "Not enumerable" }; console.log(Object.getOwnPropertyNames(obj)); // []
- 심볼 레지스트리:
Symbol.for()
메서드를 사용하면 전역 심볼 레지스트리를 통해 심볼을 생성 및 검색할 수 있습니다. 이 방법으로 생성된 심볼은 애플리케이션 전역에서 공유되어 같은 식별자를 가진 심볼에 접근할 수 있습니다. let globalSymbol = Symbol.for("app.global"); let sameGlobalSymbol = Symbol.for("app.global"); console.log(globalSymbol === sameGlobalSymbol); // true
- 심볼과 객체의 속성: 객체에 심볼을 속성 키로 사용하면, 이 속성은 일반적인 접근 방식으로는 보이지 않습니다. 이는 객체의 내부 인터페이스를 보호하는 데 유용할 수 있습니다.
let id = Symbol("id"); let user = { name: "John", [id]: 123 }; console.log(user[id]); // 123
사용 예시
심볼은 주로 객체의 특별한 속성을 다룰 때 사용합니다. 예를 들어, 객체가 표준 행동을 오버라이드할 필요가 있는 경우 (예: 객체가 이터러블 프로토콜을 구현하는 경우), 심볼을 사용하여 충돌 없이 구현할 수 있습니다.
let iterable = {
[Symbol.iterator]() {
let step = 0;
return {
next() {
if (step < 5) {
step++;
return { value: step, done: false };
}
return { done: true };
}
};
}
};
for (let value of iterable) {
console.log(value); // 1, 2, 3, 4, 5
}
정리
Symbol
은 자바스크립트에서 매우 유용한 도구로, 코드의 모듈성과 재사용성을 향상시키는 데 도움을 줄 수 있습니다.
반응형
'도서로 공부하는 프로그래밍 > 코딩 자율학습' 카테고리의 다른 글
브라우저의 개발자 도구 (58) | 2024.05.04 |
---|---|
피지컬 컴퓨팅 (61) | 2024.05.03 |
[NodeJS] Node.js의 주요 특징 (63) | 2024.04.29 |
[NodeJS] 간단한 라우터 만들기 (65) | 2024.04.27 |
[NodeJS] OK를 반환하는 간단 서버 만들기 (60) | 2024.04.26 |