다시 하자 기초! 자바의 Vector와 ArrayList 차이점
먼저 Vector와 ArrayList에 관한 기본적인 지식이 부족한 사람들은 이전 글인 컬렉션부터 보고 오면 될 것 같다.
https://smujihoon.tistory.com/155
동기화란?
동기화는 쓰레드가 하나의 자원을 놓고 싸우지 말고 락을 가진 쓰레드부터 차례대로 그 자원을 쓰고 다음 쓰레드에게 락과 함께 자원을 반납하는 것을 말합니다.
주의할점은 동기화를 안해도 되는 부분을 괜히 동기화하면 쓰레드가 하나밖에 수행되지 못하니까 잘 판단해야 합니다.
동기화하는 방법은 메서드를 동기화하거나 블락을 동기화할 수 있는데 동기화된 메서드를 호출하는 것이 동기화된 블록을 호출하는 것보다 약간 빠릅니다.
Vector와 ArrayList의 주요 차이점
1. 동기화(Synchronize)
Vector는 동기화가 이미 되어 있는 클래스고 ArrayList는 동기화처리가 안된 클래스입니다.
그 때문에 Vector는 한 번에 하나의 쓰레드만 접근 가능하며, ArrayList는 동시에 여러 쓰레드가 접근 가능합니다.
ArrayList에서 여러 쓰레드가 동시에 엑세스 해야하는 경우 개발자가 명시적으로 동기화코드를 추가하면됩니다.
그렇기 때문에 멀티쓰레드 상황이 아닌 환경에선 ArrayList가 더 빠릅니다.
2. 쓰레드 안전(Thread Safe)
스레드 안전이란 멀티 쓰레드 프로그래밍에서 여러 스레드가 동시에 접근이 이루어져도 프로그램 실행에 문제 없음을 뜻합니다. 앞서 말했듯이 Vector는 동기화 되어 있기 때문에 한 번에 하나의 쓰레드만 접근할 수 있기 때문에 안전합니다.
ArrayList는 동기화되지 않았기 때문에 명시적으로 동기화 할 필요가 없습니다.
3. 크기 증가
최대 인덱스를 초과했을 때 추가되는 인덱스의 수가
Vector는 현재 배열의 크기의 100%이며
ArrayList는 현재 배열의 크기의 50%증가.
결론
멀티스레드 환경이 아닌 경우 ArrayList를 사용하는 것이 바람직하고 Vector를 사용하기 위한 명시적 요구가 없을 때는 ArrayList를 사용하도록 합시다.
출처 https://yeolco.tistory.com/94