2025-09-29 01:34
맵
- 키-값 쌍을 저장하고 키의 순서를 기억하는 순회 가능한 컬렉션
- 기존 객체]의 단점을 보완하여 모든 타입을 키로 사용할 수 있고, 성능과 편의성 면에서 장점
set,get,has,delete등 명확한 메서드를 통해 데이터를 조작하며,for...of루프나forEach로 쉽게 순회할 수 있다.
| 특징 | 맵 (Map) | 객체 (Object) |
|---|---|---|
| 키 타입 | 모든 타입 (원시, 객체, 함수 등) | 문자열 또는 심볼 |
| 순서 보장 | 보장됨 (삽입 순서) | 보장되지 않음 (최신 명세에서 일부 보장) |
| 크기 확인 | size 프로퍼티 (O(1) 시간 복잡도) | Object.keys().length (O(n) 시간 복잡도) |
| 성능 | 잦은 추가/삭제 시 일반적으로 더 빠름 | 단순 조회 및 적은 변경 시 빠름 |
| 이터레이션 | 이터러블 프로토콜 내장, 순회 용이 | for...in, Object.keys/values/entries 필요 |
| 프로토타입 | 프로토타입 없음, 키 충돌 위험 없음 | Object.prototype 상속, 충돌 가능성 있음 |
| JSON 변환 | 직접 변환 불가, 배열로 변환 후 가능 | JSON.stringify로 직접 변환 가능 |
이런 경우 맵(Map)을 사용하세요 ✅
- 키가 문자열이 아니어야 할 때: DOM 요소를 키로 사용하거나, 사용자 정의 객체를 키로 매핑해야 하는 경우 맵이 유일한 선택지입니다.
- 데이터의 순서가 중요할 때: 입력된 순서대로 처리해야 하는 데이터(예: 작업 큐)를 다룰 때 맵의 순서 보장 특성은 매우 유용합니다.
- 데이터의 추가와 삭제가 빈번하게 일어날 때: 맵은 특히 요소의 추가 및 삭제 작업에서 객체보다 더 나은 성능을 보이는 경향이 있습니다.
- 컬렉션의 크기를 자주 확인해야 할 때:
size프로퍼티는 매우 효율적으로 크기를 알려줍니다. - 순수 데이터 저장소로 사용할 때: 프로토타입과의 충돌을 원천적으로 방지하고 싶을 때 맵이 더 안전합니다.
이런 경우 객체(Object)를 사용하세요 ✅
- 단순하고 정적인 데이터 구조일 때: 키가 모두 문자열이고, 데이터 구조가 한 번 정해진 후 거의 바뀌지 않는 경우(예: 설정 객체, JSON에서 파싱된 데이터) 객체가 더 가볍고 편리합니다.
- JSON과의 상호작용이 필요할 때: 서버와 데이터를 주고받는 등 JSON 형식으로의 변환이 필수적일 때 객체가 훨씬 간단합니다.
- 특정 로직을 포함하는 ‘객체’가 필요할 때: 데이터와 함께 메서드(동작)를 캡슐화하는 객체지향 프로그래밍의 개념을 활용할 때는 당연히 객체를 사용해야 합니다.
- 핵심 요약:
- 동적인 데이터를 안전하고 효율적으로 관리하고 싶다면 맵을,
- 가볍고 정적인 데이터 덩어리나 JSON 호환성이 중요하다면 객체를 사용하는 것이 좋습니다.