Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발빌런

ArrayList vs Vector 본문

Java

ArrayList vs Vector

seungjun.lee 2018. 2. 26. 22:26

ArrayList, Vector 모두 List 인터페이스를 구현한 콘크리트 클래스로서 자바의 배열이 가지고 있는 한계점을 개선했습니다.


자바의 배열은 고정된 길이를 가지고 있기 때문에 데이터가 몇 개 인지 알 수 있는 경우에는 사용하는데 지장이 없지만, 


데이터가 몇 개 인지 모를 경우에는 배열의 사이즈를 잡기 곤란합니다.



그렇기에 ArrayList, Vector를 많이 이용하는데 두 클래스의 차이점이 무엇인지 조사해봤습니다.



1. Synchronization


  • ArrayList는 여러 개의 쓰레드가 한번에 접근하여 연산 (add, remove)가 가능! (non-synchronized)
  • Vector는 한 쓰레드가 접근중인 경우 다른 쓰레드가 접근할 수 없음! (synchronized)




2. Resize


ArrayList, Vector 모두 데이터가 새롭게 추가되어 크기가 변할 경우 resize 하게 되는데, resize 되는 크기가 다릅니다.


  • - ArrayList: 자기 크기의 반 만큼 resize 함.
  • - Vector: 자기 크기의 두 배 만큼 resize 함.




3. 어떨 때 ArrayList, Vector를 사용해야 할까?



여러 쓰레드가 동시에 접근하여 데이터를 변경하는 경우는 Vector


ArrayList는 앞에서 말씀드렸듯이 non-synchronized 되어 있습니다. 즉 여러 개의 쓰레드가 동시에 참조하여 데이터를 변경할 수 있습니다.


이 경우 데이터 불일치 문제가 발생할 수 있기 때문에 여러 쓰레드가 동시에 접근하여 데이터 추가/삭제를 하는 경우에는 Vector를 사용해야 합니다.



여러 쓰레드가 동시에 접근하지만 데이터는 변경하지 않는 경우는 ArrayList


Vector는 synchronized 되어 있어, 한 쓰레드가 vector를 참조하고 있는 경우 다른 쓰레드는 이를 참조할 수 없고 먼저 참조한 쓰레드가 사용을 종료할 때 까지 대기합니다.


따라서 thread-safe 하지만, 다중 쓰레드가 접근해도 문제 없는 경우 (단순히 데이터를 읽기만 하고, 데이터를 추가/삭제/수정 등은 하지 않음)에는 ArrayList 보다 성능이 낮기 때문에 이 경우에는 ArrayList를 사용해야 합니다.





'Java' 카테고리의 다른 글

안드로이드에서 Fragment를 newInstance로 생성하는 이유  (0) 2018.02.26
Comments