Map
기본 정보
- 명칭: Map
- 분류: 키-값(Key-Value) 자료구조
- 관련 자료구조: HashMap, Dictionary, Object
- 주요 용도: 빠른 데이터 조회 및 저장
- 관련 주제: #Map #HashMap #자료구조 #JavaScript
개요
Map은 키(Key)와 값(Value)을 한 쌍으로 저장하는 자료구조이다.
배열(Array)은 인덱스로 접근하지만, Map은 키를 통해 데이터를 조회한다.
실제로 대부분의 언어에서 Map은 내부적으로 Hash Table(해시 테이블) 구조를 사용하며, 평균적으로 매우 빠른 조회 성능을 제공한다.
구조
Map
↓
Key
↓
Value
예시
"user1" → "구름"
"user2" → "철수"
"user3" → "영희"
JavaScript Map 생성
const users = new Map();
데이터 추가
users.set("user1", "구름");
users.set("user2", "철수");
데이터 조회
users.get("user1");
결과
구름
데이터 존재 여부
users.has("user1");
결과
true
데이터 삭제
users.delete("user1");
전체 삭제
users.clear();
크기 확인
users.size
반복문
for(const [key, value] of users){
console.log(key, value);
}
시간 복잡도
| 작업 | 시간 복잡도 |
|---|---|
| 조회 | O(1) |
| 추가 | O(1) |
| 삭제 | O(1) |
| 전체 탐색 | O(N) |
평균 기준이다.
배열과 비교
배열 검색
const arr = [
"구름",
"철수",
"영희"
];
arr.includes("영희");
시간복잡도
O(N)
Map 검색
users.has("영희");
시간복잡도
O(1)
왜 빠른가?
배열
1
↓
2
↓
3
↓
4
↓
찾음
순차 탐색
Map
Hash
↓
주소 계산
↓
즉시 접근
해시 함수를 사용하기 때문이다.
HashMap 원리
Key
↓
Hash Function
↓
Bucket
↓
Value
예시
"user1"
↓
12345
↓
메모리 위치
↓
"구름"
실무 예제
회원 캐시
const members = new Map();
members.set(
1,
{
name:"구름"
}
);
방문자 수 집계
const count = new Map();
count.set(
"php",
100
);
count.set(
"javascript",
250
);
중복 제거
const arr =
[1,1,2,3,3];
const unique =
[...new Set(arr)];
Map/Set 계열 자료구조가 많이 사용된다.
Object와 Map 차이
| Object | Map |
|---|---|
| 문자열 Key 중심 | 모든 타입 Key 가능 |
| 크기 확인 불편 | size 지원 |
| 순회 제한 | 반복문 지원 |
| 성능 차이 존재 | 대량 데이터에 유리 |
PHP 배열도 사실상 Map
PHP
$user = [
"name" => "구름",
"age" => 30
];
내부적으로 Hash Table 구조를 사용한다.
Python Dictionary
users = {
"name":"구름",
"age":30
}
Dictionary 역시 HashMap 기반이다.
Java HashMap
Map<String,String>
users =
new HashMap<>();
실무에서 가장 많이 사용되는 자료구조 중 하나이다.
언제 사용하는가?
다음 상황에서는 Map 사용이 유리하다.
- 회원 조회
- 캐시 시스템
- 중복 체크
- 방문자 집계
- 검색 기능
- 데이터 매핑
코딩테스트 단골
빈도수 계산
const map = new Map();
for(const word of words){
map.set(
word,
(map.get(word)||0)+1
);
}
중복 체크
const set = new Set();
for(const item of arr){
}
실무 메모
실무에서는 다음과 같은 방식이 권장된다.
- 검색이 많으면 Array보다 Map 사용
- 중복 제거는 Set 활용
- 회원 정보 캐시 저장
- API 응답 캐싱
- 방문자 통계 집계
- 대량 데이터 검색 최적화
- Key 설계 명확히 하기
- 메모리 사용량 고려
- Object 대신 Map 검토
- 시간복잡도 O(1) 활용
Map과 함께 사용하는 기술
대표 면접 질문
- Map과 Object 차이는?
- HashMap이 빠른 이유는?
- Map의 시간복잡도는?
- Hash Collision이란?
- Set과 Map 차이는?
- Array 대신 Map을 사용하는 이유는?
관련 문서
출처
- MDN Web Docs
- Java HashMap 공식 문서
- Python Dictionary 구현 문서