json 객체와 Map()의 비교
JSON 객체 vs Map()
항목 | JSON 객체 | Map() |
---|---|---|
기본 목적 | 일반적인 키-값 저장용 객체 | 키-값 쌍을 위한 전용 컬렉션 |
키 타입 | 문자열/심벌만 가능 | 모든 타입(객체, 함수 등 포함) |
정렬 순서 | 삽입 순서를 보장하지 않음 (ES6부터 일부 보장) | 삽입 순서 보장 |
성능(CRUD) | 빠르지만 해시 처리와 내부 최적화가 부족함 | 더 빠르고 일관된 성능 제공 |
반복성 | for...in, Object.keys() 등 필요 | for...of로 바로 순회 가능 |
메모리 최적화 | 일반적인 용도로는 적절 | 대량 데이터 처리에 더 적합 |
사용성 | 문법이 간단 | 관련 메서드(get, set, has 등) 사용 필요 |
- Json 객체는 단순하고 가벼운 용도에 적합
- Map은 성능과 키 유연성, 반복성에 적합
- 특히 많은 데이터를 처리하거나 비 문자열 키를 사용할 경우 Map이 더 적합
관련 코드의 성능 비교
// 기능 : 배열 내 원소의 출현 횟수를 집계
const arr = [...]
// 코드 A - json 객체 사용
let temp1 = {}
arr.map((v) => {{
temp1[v] = (temp1[v] || 0) + 1
}})
// 코드 B - Map() 사용
let temp2 = new Map()
arr.map((v) => {
temp2.set(v, (temp.get(v) || 0) + 1)
})
분석
코드 A - json 객체 사용
- 프로퍼티 접근이 빠르지만 내부 해시는 문자열 기반이라 충돌 가능성 존재
- 최적화는 잘 되어 있지만 비문자열 키는 강제로 문자열로 변환됨
코드 B - Map 버전
- 내부적으로 해시 테이블 기반으로 구현이 되어 있음
- 데이터가 많아 질 수록 일정하고 빠른 성능을 보장
- 키 타입을 유지
실사용에서의 성능 테스트 요약
- 작은 데이터셋 ( 1000개 이하 ) : json객체가 빠르거나 비슷
- 중간 ~ 대규모 데이터셋 ( 수만 개 이상 ) : Map이 일관되게 더 빠름
- 많은 키 생성 및 삭제 반복 : Map이 훨씬 안정적인 성능
항목 | 코드 A - json 객체 | 코드 B - Map() |
---|---|---|
소량 데이터 | 더 간단하고 빠름 | 느리지는 않지만 복잡 |
대량 데이터 | 성능 저하 가능 | 더 우수하고 안정적 |
비문자열 키 | 자동 문자열화 | 안전하게 처리 |
정리 | 소규모, 단순 집계에 유리 | 대규모, 범용 키 집계에 최적 |