Back-end/Java

다시 하자 기초! 자바의 Vector와 ArrayList 차이점

이안_ian 2019. 5. 1. 13:35
반응형

먼저 Vector와 ArrayList에 관한 기본적인 지식이 부족한 사람들은 이전 글인 컬렉션부터 보고 오면 될 것 같다.

https://smujihoon.tistory.com/155

 

다시 하자 기초! 컬렉션 프레임워크

컬렉션 프레임웍 데이터 군을 저장하는 클래스들을 표준화한 설계를 뜻한다. 다수의 데이터, 즉 데이터 그룹을, 프레임웍은 표준화된 프로그래밍 방식을 의미한다. JDK1.2 이전까진 Vector, HashTable, Properties..

smujihoon.tistory.com

동기화란?

동기화는 쓰레드가 하나의 자원을 놓고 싸우지 말고 락을 가진 쓰레드부터 차례대로 그 자원을 쓰고 다음 쓰레드에게 락과 함께 자원을 반납하는 것을 말합니다.

 

주의할점은 동기화를 안해도 되는 부분을 괜히 동기화하면 쓰레드가 하나밖에 수행되지 못하니까 잘 판단해야 합니다.

 

동기화하는 방법은 메서드를 동기화하거나 블락을 동기화할 수 있는데 동기화된 메서드를 호출하는 것이 동기화된 블록을 호출하는 것보다 약간 빠릅니다.

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

 

 

 

 

반응형