반응형
Symbol 타입
Symbol
은 ES6에서 도입된 원시 데이터 타입으로, 유일한 식별자를 만들 때 사용됩니다. Symbol
은 주로 객체의 속성 키로 사용되며, 이름이 충돌할 염려 없이 고유한 속성을 정의할 수 있습니다.
기본 사용법
let symbol1 = Symbol('description');
let symbol2 = Symbol('description');
console.log(symbol1 === symbol2); // false
console.log(symbol1.toString()); // 'Symbol(description)'
객체의 심볼 속성
Symbol
을 사용하여 객체에 고유한 속성을 추가할 수 있습니다.
예제
let obj = {};
let sym = Symbol('uniqueKey');
obj[sym] = 'value';
console.log(obj[sym]); // 'value'
console.log(Object.keys(obj)); // []
console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(uniqueKey)]
심볼의 주요 용도
- 고유한 객체 속성 키: 다른 속성과 충돌하지 않는 고유한 속성을 정의할 수 있습니다.
- 내장 심볼 사용: JavaScript의 내장 심볼을 사용하여 객체의 기본 동작을 변경할 수 있습니다.
내장 심볼
ES6에서 제공하는 여러 내장 심볼을 사용하면 객체의 특정 동작을 커스터마이징할 수 있습니다.
예제
let obj = {
[Symbol.iterator]() {
let step = 0;
const iterator = {
next() {
step++;
if (step <= 3) {
return { value: step, done: false };
}
return { value: undefined, done: true };
}
};
return iterator;
}
};
for (let value of obj) {
console.log(value); // 1, 2, 3
}
이터러블과 이터레이터
이터러블(iterable)은 Symbol.iterator
메서드를 가지고 있으며, 이 메서드는 이터레이터를 반환합니다. 이터레이터(iterator)는 next
메서드를 가지고 있으며, 이 메서드는 { value, done }
객체를 반환합니다.
이터러블 객체
이터러블 객체는 Symbol.iterator
메서드를 구현하여 이터레이터를 반환해야 합니다.
예제
let iterable = {
[Symbol.iterator]() {
let step = 0;
return {
next() {
step++;
if (step <= 3) {
return { value: step, done: false };
} else {
return { value: undefined, done: true };
}
}
};
}
};
for (let value of iterable) {
console.log(value); // 1, 2, 3
}
이터레이터 객체
이터레이터 객체는 next
메서드를 구현하여 { value, done }
객체를 반환합니다.
예제
function createIterator(items) {
let i = 0;
return {
next() {
let done = i >= items.length;
let value = !done ? items[i++] : undefined;
return { value, done };
}
};
}
let iterator = createIterator([1, 2, 3]);
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 }
이터러블과 이터레이터의 장점
- 순회 프로토콜 구현: 이터러블/이터레이터 프로토콜을 사용하여 커스텀 객체를 순회할 수 있습니다.
- 유연한 순회 방식:
for...of
문법을 사용하여 간결하고 직관적으로 순회할 수 있습니다. - 내장 이터러블 지원: 배열, 문자열, Map, Set 등 내장 객체가 이터러블을 지원합니다.
결론
Symbol
과 이터러블/이터레이터는 JavaScript에서 객체의 고유한 속성을 정의하고, 순회 가능한 데이터를 쉽게 처리할 수 있도록 도와주는 중요한 기능입니다. 이번 글에서는 Symbol
타입, 객체의 심볼 속성, 내장 심볼, 이터러블과 이터레이터의 개념과 사용법에 대해 배웠습니다. 다음 글에서는 제너레이터에 대해 알아보겠습니다.
다음 글에서 만나요!
반응형
'JavaScript 문법 시리즈' 카테고리의 다른 글
[JavaScript 문법] 33일차: Proxy와 Reflect (0) | 2024.09.03 |
---|---|
[JavaScript 문법] 32일차: 제너레이터 (0) | 2024.09.02 |
[JavaScript 문법] 30일차: 정규 표현식 (0) | 2024.08.30 |
[JavaScript 문법] 29일차: 에러 처리 (0) | 2024.08.29 |
[JavaScript 문법] 28일차: AJAX와 Fetch API (0) | 2024.08.28 |