코딩테스트 알고리즘 자료구조 Vector 정리
이 장에서 배울 내용
- Vector
- Vector 관련 메서드
- Vector, ArrayList 장단점 비교
Vector
Vector는 동적 배열로 ArrayList와 같이 List collection을 상속받는 객체이다. 사용법과 메서드 구성도 크게 다르지 않다. Collections 프레임워크가 나오기 전, 동적 배열이 필요할 때 과거에 사용되었으며 현재는 성능상 ArrayList가 더 자주 사용되지만, 호환성을 위해 남아있다. Vector에서 중요하게 봐야할 점이자 ArrayList와의 차이점은 synchronized 키워드가 걸려있어서 동기화된 메서드로 구성되어있다는 점이다.
동기화된 메서드
동기화된 메서드란 메서드가 여러 스레드에 의해 동시에 호출될 때에도 안전하게 실행된다는 것을 의미한다. 그래서 멀티 스레드 환경에서 여러 스레드가 같은 작업을 호출해도 하나의 스레드가 작업을 완료할 때까지 다른 스레드들이 실행할 수 없다. 이는 안전하게 객체를 추가하고 삭제할 수 있도록 한다. 하지만, 이는 성능에 영향을 줄 수 있다.
조금 더 쉽게 비유해보면, 한 칸 밖에 없는 화장실이 있다고 했을 때 한 사람이 들어가면 문을 잠가 다른 사람이 들어올 수 없게 한다. 이처럼 사용중일 때 다른 스레드가 순서를 정하여 대기하는 상태가 ”동기화”된 상태이다.
Vector 선언
Vector는 타입을 지정하지 않으면 자동으로 Object로 초기화되어 사용할 수 있지만, 이렇게 할 경우 벡터 내부의 값에 접근할 때 캐스팅 연산이 필요하며 잘못된 타입으로 캐스팅하면 에러가 발생한다.
Vector v = new Vector(); // Object로 선언
Vector<Integer> number1 = new Vector<Integer>(); // int 타입만 가능
Vector<Integer> number2 = new Vector<Integer>(10); // 초기 용량 10으로 설정, int 타입만 가능
Vector 관련 메서드
ArrayList와 유사한 함수는 생략
add(E element): 맨 뒤에 요소 추가, 성공 여부를boolean으로 반환capacity(): 현재 용량값을int로 반환addAll(Collections<? Extends E> c): c의 모든 요소를 맨 뒤에 추가isEmpty(): 비어있으면true반환removeAllElements(): 모든 요소를 삭제하고 크기를0으로 만듦toArray(): 모든 요소를 포함하는 배열(Object[]) 반환
Vector vs ArrayList
- 성능: 백터는 동기화 되어있다는 것이
ArrayList와의 가장 큰 차이인데, 이는 스레드가 1 개일때도 동기화를 진행하기 때문에 성능이 떨어진다. 그리고 전반적인 작업 속도도Vector가 더 빠르다. - 용량증가분:
Vector는 용량초과 시 증가분을 설정할 수 있는 생성자가 존재하며 기본적으로 현재 배열 크기의 100% 증가,ArrayList는 50% 증가한다. 때문에Vector는 메모리 비용이 더 많이 든다. - API: 기본적으로 비슷한 API를 가지고 있지만
Vector는 오래된 클래스이고ArrayList가 현대적으로 많이 쓰인다. - 유지보수성:
Vector는 초창기에 만든 클래스이므로 Java1.2이후 도입된Collection프레임워크의List,Set,Map과 같은 인터페이스 기반 설계에 비하여 활용이 유연하지 않다.
.
.
.
.
.
결론
자바의 공식 문서에도 멀티스레드 환경이 아니라면 추후에 나온 ArrayList 사용을 권장한다. 동기화 필요성이 있지만, 복잡한 동기화 전략이 필요하지 않을 때 Vector가 사용되기도 하지만, 실무에서는 보통 Collections.synchronizedList() 를 통해 동기화를 적용하거나 CopyOnWriteArrayList로 대체 클래스를 사용하는 것을 더 선호한다고 한다.
[참고자료]
- 🧱 자바 Vector 구조 & 사용법 정리
- [Java] Vector
- 알고리즘 기본 숙지 내용 : C++와 Java 비교를 중심으로
- [JAVA] Vector vs ArrayList
- [Java] Java에서 사용하는 여러 자료구조 정리
- ava.util.Vector 주요 메소드 [1/1]
- [[JAVA] 자료구조 ① Vector
](https://you-r-planet-b612.tistory.com/131) - [Java] 자바 Vector 사용법 & 예제 총정리