connecting the dots
Java에서의 Vector (+ ArrayList와 비교) 본문
지난 포스팅에서는 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 |