JavaScript에서 심볼(Symbol)은 ES6에서 추가된 7번째 데이터 타입이다.
심볼(Symbol) 타입은 JavaScript에서 고유하고 불변하는 값을 생성하는 데 사용된다.
심볼은 주로 객체의 속성 키로 활용되어 속성 이름 충돌을 방지하거나, 특정 기능을 구현하는 데 사용된다.
특징
- 원시 타입 (primitive data type): Boolean, null, undefined, Number, String과 같은 원시 타입에 속한다.
- 변경 불가능한 값: 심볼 값은 한 번 생성되면 변경할 수 없다.
- 유일성: 심볼은 생성될 때마다 고유한 값으로 만들어진다. 같은 설명(description)을 가진 심볼도 서로 다른 값으로 취급된다.
생성 방법
- 심볼은 Symbol() 함수를 호출하여 생성한다.
- const mySymbol = Symbol();
예시
1. 객체의 고유한 속성 키 생성
const mySymbol = Symbol('myProperty');
const myObject = {
name: 'John Doe',
[mySymbol]: 'This is a hidden value' // 심볼을 키로 사용하여 속성 정의
};
console.log(myObject.name); // "John Doe" 출력
console.log(myObject[mySymbol]); // "This is a hidden value" 출력
// for...in 루프에서는 심볼 키를 가진 속성이 나타나지 않습니다.
for (const key in myObject) {
console.log(key); // "name"만 출력 (심볼 키는 무시됨)
}
이 예시에서 mySymbol은 객체 myObject의 속성 키로 사용되었다. 이렇게 하면 mySymbol과 같은 이름을 가진 다른 속성과 충돌할 염려가 없다. 특히, 외부 라이브러리에서 가져온 객체에 속성을 추가할 때 유용하다.
2. Well-Known Symbols (잘 알려진 심볼)
JavaScript는 언어 내부 동작을 제어하기 위해 미리 정의된 심볼들을 제공한다. 이러한 심볼들을 "Well-Known Symbols"라고 한다.
예를 들어, Symbol.iterator는 객체가 반복 가능(iterable)하도록 정의하는 데 사용된다.
const myArray = [1, 2, 3];
// Symbol.iterator를 사용하여 배열의 이터레이터를 얻습니다.
const iterator = myArray[Symbol.iterator]();
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
이 외에도 Symbol.hasInstance, Symbol.toStringTag 등 다양한 Well-Known Symbols가 있으며, 각각 특정 동작을 정의하는 데 사용된다.
심볼은 주로 이러한 특수한 상황에서 활용되며, 일반적인 웹 개발에서 자주 사용되는 타입은 아니다. 하지만, 심볼을 이해하면 JavaScript 언어의 고급 기능을 더 깊이 있게 활용할 수 있다.
'자바 스크립트(java script) > 자바 스크립트 기초' 카테고리의 다른 글
JavaScript 비동기 처리: 콜백, 프로미스, async/await (0) | 2025.03.26 |
---|---|
ES6 클래스(class) (0) | 2025.03.26 |
다형성(Polymorphism) (0) | 2025.03.25 |
객체 지향 프로그래밍(OOP, Object-Oriented Programming) (0) | 2025.03.25 |
얕은 비교, 깊은 비교 (0) | 2025.03.24 |