Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 ArrayList와 Vector의 차이점 완벽 비교

Java에서 ArrayListVector는 모두 List 인터페이스를 구현한 대표적인 컬렉션 클래스입니다. 두 클래스 모두 요소의 삽입 순서를 유지하며 내부적으로 배열을 기반으로 동작한다는 공통점이 있습니다. 하지만 스레드 안정성, 성능, 크기 확장 방식 등 여러 면에서 중요한 차이점을 가지고 있어, 상황에 맞는 선택이 필요합니다.

다음 표는 ArrayList와 Vector의 핵심적인 차이점을 정리한 것입니다.

번호
구분
ArrayList
Vector
1
동기화
동기화되지 않습니다(non-synchronized).
동기화됩니다(synchronized).
2
크기 증가
용량을 초과하는 요소가 추가되면 현재 크기의 50%만큼 증가합니다.
용량을 초과하는 요소가 추가되면 현재 크기의 100%만큼 증가합니다.
3
레거시
레거시 클래스가 아니며, Java Collections Framework 이후 도입된 클래스입니다.
JDK 1.0부터 존재했던 레거시(구버전) 클래스입니다.
4
속도
동기화 오버헤드가 없어 상대적으로 빠릅니다.
동기화 처리로 인해 상대적으로 느립니다.
5
순회 방식
Iterator 인터페이스를 사용하여 요소를 순회합니다.
IteratorEnumeration 인터페이스를 모두 사용할 수 있습니다.

ArrayList vs Vector 예제 코드

두 클래스는 사용법이 거의 동일하기 때문에 코드 작성 방식에 큰 차이가 없습니다. 아래 예제를 통해 실제 동작을 확인해 보겠습니다.

JavaTester.java

import java.util.ArrayList;
import java.util.Vector;
import java.util.List;
public class JavaTester {
    public static void main(String args[]) {
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        List<String> list1 = new Vector<>();
        list1.add("A");
        list1.add("B");
        list1.add("C");
        list1.add("D");
        System.out.println(list);
        System.out.println(list1);
    }
}

실행 결과

[A, B, C, D]
[A, B, C, D]

어떤 것을 선택해야 할까?

일반적인 단일 스레드 환경에서는 동기화 오버헤드가 없는 ArrayList를 사용하는 것이 권장됩니다. 반면, 여러 스레드가 동시에 하나의 리스트에 접근하고 수정해야 하는 멀티스레드 환경이라면 스레드 안전성을 보장하는 Vector를 고려할 수 있습니다. 다만 최신 Java 개발에서는 Vector보다 Collections.synchronizedList()CopyOnWriteArrayList 같은 대안을 사용하는 것이 더 좋은 방법으로 알려져 있습니다.