자바스크립트 프로퍼티 심볼 (Property Symbols)

자바스크립트에는 다양한 프로퍼티 심볼(Property Symbols)이 존재합니다. 프로퍼티 심볼은 객체의 프로퍼티를 고유하게 식별하기 위해 사용되며, 주로 다음과 같은 경우에 활용됩니다.

프로퍼티 심볼의 생성

프로퍼티 심볼은 Symbol() 생성자 함수를 사용하여 생성할 수 있습니다. 이 함수는 항상 고유하고 변경되지 않는 심볼을 생성합니다.

const sym = Symbol();
console.log(typeof sym); // "symbol"

Symbol() 생성자 함수에는 옵셔널한 설명(description) 파라미터를 제공할 수도 있습니다. 이 설명은 디버깅 용도로 사용되며, 심볼 자체에는 영향을 주지 않습니다.

const sym = Symbol("mySymbol");
console.log(sym.toString()); // "Symbol(mySymbol)"

프로퍼티에 심볼 사용하기

프로퍼티 이름으로 키(key) 대신에 심볼을 사용하여 객체에 프로퍼티를 정의할 수 있습니다.

const age = Symbol("age");

const person = {
  name: "John",
  [age]: 30
};

console.log(person.age); // undefined
console.log(person[age]); // 30

위 예제에서 age 심볼을 사용하여 person 객체에 30이라는 값을 가진 프로퍼티를 추가했습니다. 이 프로퍼티는 명시적으로 접근할 수 없으며, 오직 심볼을 통해서만 접근할 수 있습니다.

내장된 프로퍼티 심볼

자바스크립트에는 여러 가지 내장된 프로퍼티 심볼이 존재합니다. 몇 가지 예시는 다음과 같습니다.

심볼의 내장된 프로퍼티인지 확인하려면 Symbol 객체의 정적 메소드인 Symbol.for(key)를 사용할 수 있습니다.

const mySymbol = Symbol.for("mySymbol");
console.log(Symbol.keyFor(mySymbol)); // "mySymbol"

Symbol.for(key) 메소드는 전역 심볼 레지스트리에서 심볼을 찾거나 새로 생성하여 반환합니다.

결론

프로퍼티 심볼은 자바스크립트에서 고유한 프로퍼티를 생성하고 식별하는 데 유용합니다. 이를 활용하면 프로퍼티 충돌을 피하고 숨겨진 프로퍼티를 만들 수 있습니다. 또한 내장된 프로퍼티 심볼을 사용하여 객체의 동작을 세부적으로 제어할 수 있습니다. 자바스크립트에서 프로퍼티 심볼을 적절히 활용하여 더 효과적인 코드를 작성해보세요.