심심한 개발자의 취미생활

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)
})

분석

  1. 코드 A - json 객체 사용

    • 프로퍼티 접근이 빠르지만 내부 해시는 문자열 기반이라 충돌 가능성 존재
    • 최적화는 잘 되어 있지만 비문자열 키는 강제로 문자열로 변환됨
  2. 코드 B - Map 버전

    • 내부적으로 해시 테이블 기반으로 구현이 되어 있음
    • 데이터가 많아 질 수록 일정하고 빠른 성능을 보장
    • 키 타입을 유지

실사용에서의 성능 테스트 요약

  • 작은 데이터셋 ( 1000개 이하 ) : json객체가 빠르거나 비슷
  • 중간 ~ 대규모 데이터셋 ( 수만 개 이상 ) : Map이 일관되게 더 빠름
  • 많은 키 생성 및 삭제 반복 : Map이 훨씬 안정적인 성능
항목 코드 A - json 객체 코드 B - Map()
소량 데이터 더 간단하고 빠름 느리지는 않지만 복잡
대량 데이터 성능 저하 가능 더 우수하고 안정적
비문자열 키 자동 문자열화 안전하게 처리
정리 소규모, 단순 집계에 유리 대규모, 범용 키 집계에 최적