[Rust 공식문서 한국어 정리] 124. Rust HashMap<K,V> 가이드
[Rust 공식문서 한국어 정리] 124. Rust HashMap 가이드
원문 제목: Struct std::collections::HashMap
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rust의 HashMap가 제공하는 해시 기반 키-값 저장소를 상세히 다룹니다.
HashMap의 기본 동작, 해시 알고리즘, 성능 특성을 학습합니다.
삽입, 조회, 수정, 삭제 메서드와 Entry API 활용법을 정리합니다.
HashMap 키가 Eq와 Hash를 구현해야 하는 이유와 커스텀 키 사용법을 설명합니다.
해시 충돌, 용량 재조정, 기본 해셔와 커스텀 해셔를 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① HashMap — 해시 기반 키-값 맵
② Eq + Hash — 키 타입의 필수 트레이트
③ Entry API — 키 존재 여부에 따른 조걶 삽입/수정
④ SipHash — 기본 해시 알고리즘(DoS 저항)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
HashMap은 해시 테이블 기반의 키-값 쌍 저장소입니다.
HashMap::new()로 빈 맵을 생성합니다.
insert(key, value)로 키-값을 삽입하며 기존 값이 있으면 교첩니다.
get(&key)는 Option<&V>를 반환합니다.
get_mut(&key)는 Option<&mut V>를 반환하여 값을 수정할 수 있습니다.
remove(&key)는 키-값을 제거하고 값을 Option로 반환합니다.
contains_key(&key)는 키 존재 여부를 bool로 반환합니다.
Entry API는 키가 존재하지 않을 때만 삽입하거나 수정하는 복합 연산을 제공합니다.
map.entry(key).or_insert(default)는 키가 없으면 기본값을 삽입하고 참조를 반환합니다.
map.entry(key).or_insert_with(|| compute())는 키가 없을 때만 클로저를 실행합니다.
map.entry(key).and_modify(|v| *v += 1).or_insert(0)처럼 수정과 삽입을 조합할 수 있습니다.
키는 Eq와 Hash를 모두 구현해야 합니다.
기본 해시 알고리즘은 DoS 공격에 강한 SipHash 계열입니다.
with_hasher로 FxHashMap 등의 커스텀 해셔를 적용할 수 있습니다.
용량이 부족하면 자동으로 재조정(resize)이 발생합니다.
with_capacity로 초기 용량을 지정하여 재조정을 줄일 수 있습니다.
keys(), values(), values_mut(), iter(), iter_mut(), drain() 등 다양한 반복자를 제공합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
빈도수 계산, 캐시, 인덱스 구축 등에 HashMap을 사용합니다.
Entry API로 중복 키 처리를 한 번에 수행하여 두 번의 해시 연산을 피합니다.
커스텀 키 타입에 #[derive(PartialEq, Eq, Hash)]를 구현합니다.
성능이 중요한 낮부 코드에서는 FxHashMap으로 해시 오버헤드를 줄입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
HashMap은 Rust의 표준 해시 기반 맵으로 평균 O(1) 접근을 제공합니다.
Entry API는 키 기반 조걶 연산을 우아하게 처리합니다.
Eq + Hash 계약과 해시 알고리즘 선택이 올바른 동작과 성능을 결정합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/collections/struct.HashMap.html
HashMap Methods: https://doc.rust-lang.org/std/collections/struct.HashMap.html
#Rust #HashMap #해시맵 #컬렉션 #번역

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30