개발기록

HashMap과 HashTable의 차이 본문

자료구조

HashMap과 HashTable의 차이

Danuvibe 2024. 9. 2. 20:37

HashMap과 HashTable의 차이점

Java에서 키-값 쌍을 저장하는 데 사용되는 두 가지 주요 자료구조로 HashMap과 HashTable이 있습니다. 이 두 클래스는 비슷해 보이지만 중요한 차이점들이 있습니다. 이 포스트에서는 HashMap과 HashTable의 주요 차이점을 살펴보겠습니다.

1. 동기화 (Synchronization)

  • HashTable: 동기화됨 (thread-safe)
  • HashMap: 동기화되지 않음 (not thread-safe)

HashTable은 모든 메서드가 동기화되어 있어 멀티스레드 환경에서 안전합니다. 반면 HashMap은 동기화되지 않아 단일 스레드 환경에서 더 빠르게 동작합니다.

2. Null 키와 값 허용

  • HashTable: null 키와 값을 허용하지 않음
  • HashMap: null 키 하나와 여러 null 값을 허용

HashMap은 null을 키로 사용할 수 있으며, 여러 개의 null 값을 가질 수 있습니다. HashTable은 null을 키나 값으로 사용하려고 하면 NullPointerException을 발생시킵니다.

3. 성능

  • HashTable: 동기화로 인해 상대적으로 느림
  • HashMap: 동기화되지 않아 더 빠름

단일 스레드 환경에서는 HashMap이 일반적으로 더 좋은 성능을 보입니다.

4. 반복자 (Iterator)

  • HashTable: Enumeration과 Iterator 사용
  • HashMap: Iterator만 사용

HashTable은 레거시 클래스이기 때문에 Enumeration을 지원하지만, HashMap은 더 현대적인 Iterator만을 사용합니다.

5. 확장 (Inheritance)

  • HashTable: Dictionary 클래스를 상속
  • HashMap: AbstractMap 클래스를 상속

이는 두 클래스의 설계 철학과 역사적 배경의 차이를 보여줍니다.

6. 초기 용량과 로드 팩터

두 클래스 모두 초기 용량과 로드 팩터를 지정할 수 있지만, 기본값에 차이가 있습니다:

  • HashTable: 기본 초기 용량 11, 로드 팩터 0.75
  • HashMap: 기본 초기 용량 16, 로드 팩터 0.75

결론

대부분의 현대 Java 애플리케이션에서는 HashMap을 사용하는 것이 권장됩니다. 멀티스레드 환경에서 동기화가 필요한 경우, ConcurrentHashMap을 사용하는 것이 HashTable보다 더 효율적인 선택입니다.

HashTable은 주로 레거시 코드와의 호환성을 위해 유지되고 있으며, 새로운 프로젝트에서는 거의 사용되지 않습니다.

각 상황에 맞는 적절한 자료구조를 선택하는 것이 중요하며, 대부분의 경우 HashMap이 더 나은 선택이 될 것입니다.

Comments