반응형
1. Map (맵): 객체의 한계를 넘는 키-값 저장소
일반 객체({})는 키로 문자열이나 심볼만 사용할 수 있지만, Map은 어떤 값(함수, 객체 포함)도 키가 될 수 있습니다.
- 데이터 순서 보장: 삽입된 순서대로 요소를 유지합니다.
- 크기 확인 용이: .size 프로퍼티로 데이터 개수를 즉시 알 수 있습니다.
- 성능: 잦은 추가와 제거가 일어나는 시나리오에서 일반 객체보다 성능이 뛰어납니다.
JavaScript
const myMap = new Map();
const keyObj = { id: 1 };
const keyFunc = () => {};
myMap.set(keyObj, '객체를 키로 사용');
myMap.set(keyFunc, '함수를 키로 사용');
myMap.set('name', 'Gemini');
console.log(myMap.get(keyObj)); // '객체를 키로 사용'
console.log(myMap.size); // 3
2. Set (셋): 중복 없는 고유한 값들의 집합
배열과 비슷하지만, 중복된 값을 절대 허용하지 않는다는 점이 핵심입니다.
- 중복 제거: 배열에서 중복 요소를 제거할 때 가장 깔끔하게 사용됩니다.
- 값 존재 확인: .has() 메서드를 통해 특정 값이 있는지 확인하는 속도가 배열의 indexOf보다 매우 빠릅니다.
JavaScript
const mySet = new Set([1, 2, 2, 3, 4, 4, 5]);
console.log(mySet); // Set(5) {1, 2, 3, 4, 5}
console.log(mySet.has(3)); // true
// 실전 팁: 배열 중복 제거
const uniqueArray = [...new Set([1, 1, 2, 3])]; // [1, 2, 3]
3. Iterable Protocol (이터러블 프로토콜)
자바스크립트가 for...of, Spread(...), Destructuring을 수행할 수 있는 이유는 대상이 이터러블 프로토콜을 따르고 있기 때문입니다.
- Iterable (이터러블): Symbol.iterator 메서드를 가지고 있는 객체.
- Iterator (이터레이터): .next() 메서드를 호출하면 { value, done } 객체를 반환하는 객체.
🛠️ 커스텀 이터러블 만들기
JavaScript
const customRange = {
from: 1,
to: 3,
[Symbol.iterator]() {
let current = this.from;
return {
next: () => {
return current <= this.to
? { value: current++, done: false }
: { value: undefined, done: true };
}
};
}
};
for (let num of customRange) {
console.log(num); // 1, 2, 3
}
4. for...in vs for...of: 확실히 구분하기
많은 중급 개발자들이 헷갈려 하는 부분입니다.
- for...in: 객체의 **열거 가능한 속성(Key)**을 순회합니다. (배열에서는 인덱스가 나옴)
- for...of: 이터러블의 **요소(Value)**를 순회합니다. (배열, 문자열, Map, Set에 사용 가능)
💡 시니어의 조언: 배열을 다룰 때는 가급적 for...of나 고차 함수(forEach, map)를 사용하세요. for...in은 의도치 않은 상속된 속성까지 순회할 위험이 있습니다.
반응형
'개발 > Javascript' 카테고리의 다른 글
| [ES6][중급반] Step 5. 비동기 프로그래밍 2: Async/Await와 실전 데이터 통신 (0) | 2025.12.24 |
|---|---|
| [ES6][중급반] Step 4. 비동기 프로그래밍 1: Promise와 콜백 지옥 탈출 (0) | 2025.12.24 |
| [ES6][중급반] Step 2. 객체와 배열의 마법: 구조 분해 할당과 데이터 핸들링 (0) | 2025.12.23 |
| [ES6][중급반] Step 1. 함수의 고도화와 스코프: 자바스크립트의 엔진 속으로 (0) | 2025.12.23 |
| [ES6][초급반] Step 5. 비동기 처리를 정복하다: Promises의 등장 (0) | 2025.12.12 |