Java 오류 & 개발/Java 기본 문법 & 오류

[Java] HashMap vs Hashtable 차이점 및 활용법

Jinsapp 2025. 3. 12. 13:59

[Java] HashMap vs Hashtable 차이점 및 활용법

1. HashMap과 Hashtable이란?

Java에서 데이터를 **Key-Value 형태**로 저장할 때 사용되는 대표적인 자료구조가 HashMapHashtable입니다.

두 자료구조 모두 Map 인터페이스를 구현하지만, 몇 가지 중요한 차이점이 있습니다.


2. HashMap과 Hashtable의 주요 차이점

특징HashMapHashtable
동기화(Synchronization)비동기(멀티스레드 환경에서 안전하지 않음)동기화 지원(멀티스레드 환경에서 안전)
성능빠름(동기화가 없어서 성능 우수)느림(동기화로 인해 속도 저하)
Null 허용 여부KeyValuenull 허용KeyValuenull 허용 안함
대체 클래스ConcurrentHashMap 사용 가능거의 사용되지 않음

3. HashMap과 Hashtable 예제

✅ HashMap 사용 예제


import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        HashMap map = new HashMap<>();
        
        // 값 추가
        map.put("apple", 100);
        map.put("banana", 200);
        map.put("cherry", 300);
        
        // Null 허용
        map.put(null, 500);
        map.put("grape", null);

        // 값 출력
        System.out.println("HashMap: " + map);
    }
}
📌 실행 결과:

HashMap: {null=500, apple=100, banana=200, cherry=300, grape=null}

✔ HashMap은 null 키와 null 값을 허용합니다.


✅ Hashtable 사용 예제


import java.util.Hashtable;

public class HashtableExample {
    public static void main(String[] args) {
        Hashtable table = new Hashtable<>();
        
        // 값 추가
        table.put("apple", 100);
        table.put("banana", 200);
        table.put("cherry", 300);

        // Null 허용 여부 테스트 (예외 발생)
        // table.put(null, 500);  // NullPointerException 발생
        // table.put("grape", null); // NullPointerException 발생

        // 값 출력
        System.out.println("Hashtable: " + table);
    }
}
📌 실행 결과:

Hashtable: {apple=100, banana=200, cherry=300}

✔ Hashtable은 null 키와 null 값을 허용하지 않습니다. 위 코드에서 table.put(null, 500)을 실행하면 NullPointerException이 발생합니다.


4. 언제 HashMap과 Hashtable을 사용할까?

  • HashMap: 단일 스레드 환경에서 빠른 성능이 필요할 때 사용
  • Hashtable: 멀티스레드 환경에서 동기화가 필요할 때 사용 (그러나 대체로 ConcurrentHashMap을 권장)
  • ConcurrentHashMap: Hashtable의 동기화 문제를 해결한 대체 클래스

🔍 결론

  • ✔ **HashMap**은 null 키와 값을 허용하지만 동기화 지원 없음 (빠름)
  • ✔ **Hashtable**은 동기화 지원하지만 null을 허용하지 않음 (느림)
  • ✔ 멀티스레드 환경에서는 **ConcurrentHashMap**을 사용하는 것이 더 좋음

📖 다른 Java 개념도 함께 확인하세요!

👉 Java 컬렉션 프레임워크 개념 총정리 보러 가기