본문 바로가기

프로그래밍기초/자료구조

java에서 동적 배열 ArrayList와 Vector

 

ArrayList와 Vector

Java에서 동적 배열은 ArrayList와 Vector를 사용해 구현한다. 과거에는 Vector가 대표적인 동적 배열로 사용되었지만, 현재는 ArrayList를 더 많이 사용한다.

 

ArrayList와 Vector의 차이점

  1. 동기화(Synchronization)
    ArrayList는 동기화를 지원하지 않으므로 단일 스레드 환경에서 빠르게 동작한다. 반면, Vector는 기본적으로 동기화를 지원하여 멀티스레드 환경에서 안전하게 동작하지만, 그만큼 성능이 떨어진다.
  2. 크기 조정
    ArrayList는 내부 배열의 크기를 50%씩 늘리고, Vector는 크기를 2배씩 늘린다. 따라서 Vector는 더 큰 크기를 빠르게 확보할 수 있지만, 메모리 낭비가 발생할 가능성이 있다.
  3. 성능
    ArrayList는 동기화를 사용하지 않으므로, 일반적으로 더 빠르게 동작한다. 멀티스레드 환경에서는 Collections.synchronizedList()를 사용해 동기화를 추가할 수 있다.

 

ArrayList를 동적 배열로 사용하는 이유

  1. 성능
    ArrayList는 비동기적으로 동작해 Vector보다 성능이 뛰어나다. 단일 스레드 환경에서는 ArrayList가 더 적합하다.
  2. 간편함
    동기화가 필요하지 않다면, 추가 설정 없이 사용할 수 있어 간단하다.
  3. 현대적인 설계
    ArrayList는 Java 1.2에서 도입된 이후로 Vector를 대체하는 목적으로 설계되었다. Vector는 Java 1.0부터 제공된 레거시 클래스라 현재는 잘 사용하지 않는다.

 

예제

ArrayList 예제

import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        System.out.println("ArrayList: " + list);
    }
}

Vector 예제

import java.util.Vector;

public class VectorExample {
    public static void main(String[] args) {
        Vector<String> vector = new Vector<>();
        vector.add("A");
        vector.add("B");
        vector.add("C");
        System.out.println("Vector: " + vector);
    }
}

 

Vector를 사용하는 경우

Vector는 멀티스레드 환경에서 스레드 안전이 필요한 경우에 사용한다. 하지만 현대 Java 개발에서는 Vector 대신 ArrayList를 사용하고, 필요한 경우 동기화를 명시적으로 추가하거나 CopyOnWriteArrayList를 사용한다.

 

 

결론적으로, Java에서 동적 배열로는 ArrayList를 주로 사용하며, Vector는 과거의 유산으로 남아 있다. ArrayList는 성능과 유연성 면에서 더 우수하기 때문에 일반적으로 추천된다.

반응형