개발관련/자바2010. 6. 10. 11:35
아래 내용은 채소좋아라는 분이 쓰신 글입니다.

----------------------------------------------------------------------------------------------------

태초에(Java 1.0 ~ 1.1)는

Java 언어에서 제공하는 key, value 쌍을 지원하는 데이터 Container는

Hashtable 클래스가 제공되었었습니다.

그런데 이 Hashtable 은 느리기도 하고 지원하는 메소드도 기능이 많이 부족해

 

Java 1.2 부터는 HashMap 를 포함해 여러 key,value 쌍을 지원하는 클래스가 새로 생겼는데요.

이와 동시에 이런 key, value 쌍을 쓰는 클래스들의 공통된 인터페이스를 Map 인터페이스로 묶었습니다.

(활용성을 높이기 위해)

Hashtable 도 Java 1.2 부터 Map을 implements 하게 시작합니다.

 

그래서

key,value 쌍을 지원하는 대부분의 클래스들은 Map 을 구현하게 되어있는데

대표적인 Hashtable, HashMap 은 key 와 value 를 hash 알고리즘에 의해 구현해 놓은 것입니다.

TreeMap 같은 경우는 이름에서부터 알수 있듯이 tree 알고리즘에 의해 key, value를 저장하고 있습니다.

구현체마다 독특한 특성이 있는데 HashMap의 경우 hash알고리즘에 의해 get이 매우 빠르며

TreeMap 의 경우 tree 소팅을 한상태로 저장함으로 data 소팅시 유리합니다.

 

그럼 같은 알고리즘을 쓰는 Hashtable과 HashMap 은 무슨 차이가 있냐면

Hashtable 의 모든 Data 변경 매소드는 syncronized 로 선언되어있습니다.

즉 매소드 호출 전 쓰레드간 동기화 락을 통해 멀티 쓰레드 환경에서 data의 무결성을 보장해줍니다.

반대로 HashMap 은 그런 선언이 없기 때문에 멀티 쓰레드에서 여러 쓰레드가 동시에 객체의

data 를 조작하는 경우 data가 깨져버리고 심각한 오류가 발생할 수 있습니다.

다만 이 동기화 락이 매우 느린 동작이기때문에 Hashtable 보다 HashMap 이 훨씬 빠릅니다.

Map 객체가 단일 쓰레드에서만 쓰일때는 HashMap을 사용해야합니다.

 

프로그래밍상의 편의성 때문에 멀티쓰레드 환경에서도 Hashtable 을 쓰기 보다는

HashMap을 다시 감싸서

 

Map m = Collections.synchronizedMap(new HashMap(...));


과 같은 형태가 최근에는 더 선호됩니다.

자세한 사용 설명은 javadoc 문서를 참고하세요.

http://java.sun.com/j2se/1.5.0/docs/api/java/util/HashMap.html

 

Java 1.5 환경부터는 cuncurrent util 이 default 로 제공되게 되어

멀티 쓰레드 환경에서 위 방법 보다는 CuncurrentHashMap 클래스를 사용하는게 더 선호됩니다.

CuncurrentHashMap 은 synchronizedMap 으로 감싸진 HashMap 이나 Hashtable 보다 더 빠르면서도 쓰레드간 동기화를 보장해 주는데

이는 동기화시 hashtable을 전체에 대해 lock을 걸지 않고 조각을 쪼개어 부분부분 lock 걸어

쓰레드간 경쟁이 심할시에 이득을 보는 구현입니다.

http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html

 

참고하시고

Java 라는 언어는 계속 발전하고 있음으로

새로운 버전이 나올때 새로운 기능에 관심을 갖을 필요가 있습니다.

'개발관련 > 자바' 카테고리의 다른 글

java의 for-each 구문 확장  (0) 2010.06.10
[펌]템플릿 형태 JSP  (0) 2010.01.06
[펌][JAVA] static키워드 바로알기  (0) 2009.12.18
[펌]GlassFish와 Tomcat 비교  (0) 2009.06.12
Java 5.x 이상에서 유용한 기능(generic)  (0) 2009.02.27
Posted by 자개비