connecting the dots

Java에서의 Vector (+ ArrayList와 비교) 본문

data structure

Java에서의 Vector (+ ArrayList와 비교)

林 : 2021. 1. 11. 23:33

지난 포스팅에서는 Java에서 자주 쓰이는 ArrayList에 대해 알아보았습니다. 오늘은 ArrayList와 비슷하게 쓰이는 Vector의 개념과 활용방법에 대해 알아보겠습니다.

 

Vector란?

 

Vector는 ArrayList와 동일한 내부 구조를 가지고 있습니다. 정수 인덱스를 통해 값에 접근할 수 있고, 동적으로 메모리를 할당합니다. 현재의 Vector 클래스는 Collections 프레임워크와 완벽하게 호환됩니다.

 

 

Vector와 ArrayList 비교

 

- 동기화

Vector가 동기화된다면 ArrayList는 동기화되지 않은 상태입니다. Vector가 동기화 된다면 ArrayList는 동기화가 되지 않은 상태입니다. 쉽게 말해 Vector는 한번에 하나의 스레드만 접근 가능하며, ArrayList는 동시에 여러 스레드가 작업할 수 있습니다. ArrayList에서 여러 스레드가 동시에 엑세스하는 경우 개발자가 명시적으로 동기화하는 코드를 추가해야 합니다.

 

- 스레드 안전(Thread Safe)

스레드 안전이란 멀티 스레드 프로그래밍에서 여러 스레드가 동시에 접근이 이루어져도 프로그램 실행에 

문제가 없음을 뜻합니다. 앞서 말했듯이 Vector는 동기화 되어있기 때문에 한번에 하나의 스레드만 접근할 수 있기때문에 스레드 안전합니다. ArrayList는 동기화되지 않았기 때문에 명시적으로 동기화 할 필요가 있습니다.

 

- 성능

ArrayList는 동기화 되지않았기 때문에 동기화 된 Vector보다 더 빠릅니다.

 

- 크기 증가

Vector와 ArrayList 모두 동적 배열 클래스로 최대 인덱스를 초과할 때 추가되는 인덱스 수가 다릅니다.

Vector는 현재 배열의 크기의 100%가 증가하며, ArrayList의 경우 현재 배열의 크기의 50%가 증가합니다.



-> 결론 : 멀티스레드 환경이 아닌 이상 ArrayList를 사용하는 게 바람직합니다.

 

 

 

 

'data structure' 카테고리의 다른 글

큐(Queue)란  (0) 2021.01.16
스택(Stack)이란  (0) 2021.01.16
Linear Search와 Binary Search  (0) 2021.01.15
LinkedList의 개념과 구현  (0) 2021.01.14
Java에서 많이 쓰이는 ArrayList  (0) 2021.01.10