자바

[JAVA] Hashtable, HashMap, ConcurrentHashMap 차이점

planting grass 2023. 4. 10. 16:04
728x90

ConcurrentHashMap

Map 인터페이스를 구현한 콜랙션 객체 중 비슷하면서 자주 사용되는 것들은 아래와 같다.

  • Hashtable
  • HashMap
  • ConcurrentHashMap
특징 Hashtable HashMap ConcurrentHashMap
쓰레드 안전성 thread-safe thread-unsafe thread-safe
키와 값의 null 허용 여부 허용하지 않음 허용함 허용하지 않음
성능 느림 빠름 빠름

위 클래스는 Map 인터페이스를 구현한 콜렉션들이다.

이것들은 기본적으로 <key, value> 구조를 지닌다.

하나하나 무엇이 다른지 확인해보자.

Hashtable

  • put, get같은 주요 메소드에 synchronzed 키워드가 선언돼 있다.
    • synchronzed는 메소드를 호출 전 쓰레드간 동기화 락을 걸어준다.
    • ⇒ 멀티 쓰레드 환경에서도 데이터의 무결성을 보장한다.
      무결성: 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치하는 정확성을 의미한다.
    • But, 쓰레드간 동기화 락은 느리다는 단점을 지닌다.
  • <key, value>에 null값을 입력하는게 허용되지 않는다.

HashMap

  • 주요 메서드에 synchronzed 가 없다.
    • synchronzed 가 없기 때문에 성능이 빠르다.
    • 멀티 쓰레드에서 동시성 때문에 사용이 불가능하다.
  • <key, valuse>에 null값을 입력하는게 허용된다.

ConcurrentHashMap

  • 위 Hashtable과 HashMap의 단점을 보완하기위해 나타났다.
  • thread-safe하기 때문에, 멀티 쓰레드에서 사용이 가능하다.
    • synchronzed 는 없기 때문에, map 전체에 lcok을 걸지 않는다.
    • map의 일부에만 lock을 건다.
  • <key, value>에 null값을 입력하는게 허용되지 않는다.
728x90