반응형
Vector를 사용하는 것이 좋은가? ArrayList를 사용하는것이 좋은가?

이런문제는 아주 기초적인 문제이지만, 정리를 하고 넘어가는 것이 추후 안까먹는것같다.

[1] List Interface 이하 Class들

List Interface를 구현한 Class 들은 다음과 같은것들이 있다. 그중 Vector 와 ArrayList는 아주 사용법도 비슷할 뿐더러 API 역시 매우 비슷하다. 아래그림을 보자.


[2] Vector와 ArrayList의 차이점

Vector 는 API를 보면 이러한 문구를 볼 수 있다. (
Synchronized, Thread-safe)
즉,, 동기화에 안전하다는 뜻이다. 과연 무슨뜻일까? 멀티스레드 프로그램의 경우, 별도 Syncronise 와 같은 Rock을 걸지 않아도 개별 스레드에서 사요되는 Vector의 요소에 타 Thread가 접근이 불가능하다는 뜻이다.

하지만 ArrayList의 경우 는 다음과 같다.(
Unsynchronized, unThread-safe)
이말은 즉, 동기화에 안전하지않다는 뜻이다. 즉 , 멀티스레드의 경우 타 스레드가 자신의 ArrayList 값을 수정가능 하다는 것이다.

[3] 수행속도의 차이점.

Vector의 경우 Thread 동기화가 되지 않기 때문에 매번 Thread마다 동기화를 초기화 하기 위해서 많은 메모리가 필요하고 그에따른 속도 저하가 발생한다.

하지만, ArrayList의 경우는 Vector의 경우보다 속도와 메모리 면에서는 훨씬 좋은 편이다.
capacity의경우도 Vector의 경우는 capacity > size 는 경우 현재 Capacity 만큼 증가하게 되지만, ArrayList의 경우는 50%의 capacity만큼 증가하게 된다.

[4] 결론

Multi- Thread가 아닌경우, ArrayList를 사용하는 것이 좋은 것 같다. 만약 멀티 Thread를 사용해야하는경우는 Vector를 사용하는 것보다는 ArrayList를 사용하고 만약 겹치는 부분에 대해 걱정이 된다면, DML의 경우
Synchronized 락을 거는 것이 좋은방법 인것 같다.


                                                                          - 2010.11.22 랑이씀 -


반응형

+ Recent posts