자바스크립트에는 다양한 프로퍼티 심볼(Property Symbols)이 존재합니다. 프로퍼티 심볼은 객체의 프로퍼티를 고유하게 식별하기 위해 사용되며, 주로 다음과 같은 경우에 활용됩니다.
- 프로퍼티 충돌을 피하기 위해
- 숨겨진(private) 프로퍼티로 사용하기 위해
- 내장된 프로퍼티와의 충돌을 피하기 위해
프로퍼티 심볼의 생성
프로퍼티 심볼은 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.iterator
: 객체를 반복(iterate)할 수 있도록 하는 이터레이터(iterator)를 반환하는 메소드를 정의합니다.Symbol.toStringTag
: 객체의 기본 문자열 태그를 정의합니다. 기본적으로[object Object]
로 설정되어 있습니다.Symbol.species
: 파생된 객체의 생성자(constructor)를 반환하는 메소드를 정의합니다.
심볼의 내장된 프로퍼티인지 확인하려면 Symbol
객체의 정적 메소드인 Symbol.for(key)
를 사용할 수 있습니다.
const mySymbol = Symbol.for("mySymbol");
console.log(Symbol.keyFor(mySymbol)); // "mySymbol"
Symbol.for(key)
메소드는 전역 심볼 레지스트리에서 심볼을 찾거나 새로 생성하여 반환합니다.
결론
프로퍼티 심볼은 자바스크립트에서 고유한 프로퍼티를 생성하고 식별하는 데 유용합니다. 이를 활용하면 프로퍼티 충돌을 피하고 숨겨진 프로퍼티를 만들 수 있습니다. 또한 내장된 프로퍼티 심볼을 사용하여 객체의 동작을 세부적으로 제어할 수 있습니다. 자바스크립트에서 프로퍼티 심볼을 적절히 활용하여 더 효과적인 코드를 작성해보세요.