티스토리 뷰
먼저 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
'Back-end > Java' 카테고리의 다른 글
다시 하자 기초! 쓰레드 (0) | 2019.05.02 |
---|---|
다시 하자 기초! 열거형과 어노테이션 (0) | 2019.05.01 |
다시 하자 기초! 지네릭스 (0) | 2019.04.30 |
다시 하자 기초! 컬렉션 프레임워크 (0) | 2019.04.27 |
다시 하자 기초! java.lang의 유용한 클래스 (0) | 2019.04.24 |