사실 Hash는 Map이나 Set과 같은 컬렉션 유형이 아니다.
그럼에도 처음에 헷갈렸던 이유는, Map이나 Set의 구현체를 주입할 때 항상 HashMap, HashSet처럼 Hash라는 이름이 함께 등장하기 때문이었다. 그래서 Hash도 Map이나 Set처럼 하나의 컬렉션 타입이라고 착각하기 쉬웠다.
하지만 Hash는 Map이나 Set과 같은 역할을 담당하는 개념이 아니라, 데이터를 어떻게 저장하고 빠르게 찾을 것인가에 대한 구현 전략이다. 즉, Map과 Set은 “무엇을 표현하는가”에 대한 개념이고, Hash는 “그 개념을 어떻게 효율적으로 구현할 것인가”에 대한 방식이다.
Map과 Set은 역할, Hash는 전략
Map은 Key–Value 관계를 저장하는 컬렉션이고, Set은 중복을 허용하지 않는 값들의 집합이다. 이 둘은 저장 구조와 목적이 명확히 다른 컬렉션 인터페이스다. 반면 Hash는 컬렉션이 아니라, 값을 해시 함수로 변환해 빠르게 접근하기 위한 방법이다. 따라서 Hash 단독으로는 아무것도 저장하지 못하고, 반드시 Map이나 Set 같은 자료구조와 결합되어 사용된다.
이 차이를 이해하면 HashMap과 HashSet이라는 이름도 자연스럽게 해석된다. HashMap은 “Map의 역할을 하되, 내부 구현은 Hash 방식으로 한다”는 의미이고, HashSet은 “Set의 역할을 하되, 중복 검사와 조회를 Hash 기반으로 처리한다”는 의미다. 즉, Hash는 앞에 붙는 수식어에 가깝고, 실제 컬렉션의 성격은 Map과 Set이 결정한다.
컬렉션을 바라보는 기준 정리
그래서 자바 컬렉션을 바라볼 때는 이렇게 구분해서 생각하는 것이 가장 명확하다.
Map과 Set은 역할(무엇을 저장하는가)이고, Hash는 전략(어떻게 빠르게 처리하는가)이다. 여기에 따라 Tree, Linked 같은 다른 전략이 결합되면서 TreeMap, LinkedHashSet 같은 구현체들이 만들어진다.
결국 중요한 것은 “Hash를 쓰느냐 마느냐”가 아니라, 먼저 Map이 필요한지, Set이 필요한지를 결정하고, 그 다음에 정렬이 필요한지, 순서가 필요한지, 성능이 중요한지에 따라 Hash 기반 구현체를 선택하는 것이다.
이 관점으로 보면 컬렉션 이름들이 더 이상 외워야 할 대상이 아니라, 의미가 읽히는 조합으로 보이기 시작한다.
'Java' 카테고리의 다른 글
| Java에서 Map/Set/Hash가 헷갈린다…(2) (0) | 2026.01.06 |
|---|---|
| Java에서 Map/Set/Hash가 헷갈린다…(1) (0) | 2026.01.06 |
| Java Pattern / Matcher 정리 (0) | 2025.12.29 |
