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

자바 Vector 클래스 완벽 가이드: 생성부터 메서드 활용까지

자바(Java)에는 특정 유형의 데이터를 저장하기 위한 다양한 클래스가 존재합니다. 각 클래스는 고유한 특징을 가지고 있으며, 어떤 클래스를 선택하느냐에 따라 데이터에 접근하고 조작하는 방식이 달라집니다.

그중에서도 가장 중요한 클래스 중 하나가 바로 Vector 클래스입니다. Vector는 List 인터페이스의 구현체로, 크기를 동적으로 조절할 수 있는 배열(resizable array)을 생성할 때 사용됩니다.

이 글에서는 예제 코드와 함께 자바에서 Vector 클래스를 활용해 가변 배열을 만드는 방법을 단계별로 살펴보겠습니다. 아울러 Vector와 매우 유사한 ArrayList 클래스와의 차이점도 함께 알아봅니다.

자바 List 인터페이스란?

List 인터페이스는 자바에서 순서가 있는 데이터 집합을 생성할 때 사용됩니다. 예를 들어 신발 매장에서 판매되는 신발 목록이나, 은행에 근무하는 모든 직원의 이름 목록을 저장하는 데 활용할 수 있습니다.

다만 List는 인터페이스이기 때문에 직접 객체를 생성할 수 없습니다. 따라서 리스트를 만들려면 List 인터페이스를 확장하는 클래스 중 하나를 사용해야 하며, 대표적인 구현 클래스는 다음과 같습니다.

  • ArrayList
  • LinkedList
  • Vector
  • Stack

이 글에서는 그중 Vector 클래스를 사용해 List 객체를 생성하는 방법에 초점을 맞춰 설명합니다.

자바 Vector 선언 방법

Vector는 List 인터페이스를 활용해 크기가 자동으로 조절되는 배열을 생성합니다. 자바에서 벡터를 선언하는 기본 문법은 다음과 같습니다.

Vector<데이터타입> 벡터이름 = new Vector<>();

문법의 각 구성 요소를 살펴보면 다음과 같습니다.

  • Vector: 프로그램에 벡터를 선언한다고 알리는 키워드입니다.
  • 데이터타입(DataType): 벡터에 저장할 데이터의 자료형입니다.
  • 벡터이름(vector_name): 생성할 벡터 변수의 이름입니다.
  • new Vector<>();: 새로운 벡터 객체를 생성해 해당 변수에 할당합니다.

예를 들어 백화점에서 판매하는 램프의 모든 색상을 저장하는 벡터를 선언한다고 가정해 보겠습니다. 이 경우 다음과 같은 코드를 작성할 수 있습니다.

Vector<String> lamp_colors = new Vector<>();

이제 lamp_colors라는 이름의 벡터가 생성되었으며, 백화점에서 판매하는 램프 색상들을 저장할 수 있습니다.

자바 Vector 주요 메서드

자바 Vector 클래스는 벡터에 저장된 데이터를 조회하고 조작할 수 있는 다양한 메서드를 제공합니다. 지금부터 가장 많이 사용되는 핵심 메서드들을 하나씩 살펴보겠습니다.

1. 벡터에 요소 추가하기: add()

add() 메서드는 벡터에 요소를 추가할 때 사용합니다. 기본 문법은 다음과 같습니다.

add(index, elementName);

add() 메서드는 두 개의 매개변수를 받습니다.

  • index: 지정한 항목이 삽입될 위치의 인덱스 값입니다.
  • elementName: 벡터에 추가하려는 항목입니다.

벡터의 맨 끝에 항목을 추가하고 싶다면 index 매개변수는 생략해도 됩니다.

요소 추가 예제

가구 체인점을 운영하면서 새 가구 라인에 포함될 특정 책상 램프의 판매 색상 목록을 만들고 있다고 가정해 보겠습니다. 제조사로부터 다음 주문분에 주황색과 파란색 램프가 함께 배송된다는 연락을 받았으므로, 두 색상을 목록에 추가해야 합니다.

import java.util.Vector;

class Main {
    public static void main(String[] args) {
        Vector<String> lamp_colors = new Vector<>();

        lamp_colors.add("Orange");
        lamp_colors.add("Blue");

        System.out.println("Vector: " + lamp_colors);
    }
}

실행 결과:

Vector: [Orange, Blue]

코드 실행 결과, OrangeBluelamp_colors 벡터에 성공적으로 추가된 것을 확인할 수 있습니다.

이번에는 제조사가 회색 램프도 함께 배송한다고 연락했다고 가정해 보겠습니다. 회색 램프가 다른 색상보다 인기가 많을 것으로 예상되므로, 목록의 맨 앞에 추가하고 싶습니다. 이때는 인덱스를 지정하면 됩니다.

import java.util.Vector;

class Main {
    public static void main(String[] args) {
        Vector<String> lamp_colors = new Vector<>();

        lamp_colors.add("Orange");
        lamp_colors.add("Blue");
        lamp_colors.add(0, "Gray");

        System.out.println("Vector: " + lamp_colors);
    }
}

실행 결과:

Vector: [Gray, Orange, Blue]

위 예제에서는 add() 메서드에 인덱스 값 0을 지정하여 Gray 항목을 인덱스 0번 위치, 즉 벡터의 맨 앞에 추가했습니다. 이후 전체 벡터를 출력하도록 프로그램에 지시했습니다.

2. 벡터 병합하기: addAll()

addAll() 메서드는 한 벡터의 모든 요소를 다른 벡터에 추가할 때 사용합니다.

예를 들어 '색상 범위(color_range)' 목록과 '램프 색상(lamp_colors)' 목록 두 개가 있다고 가정해 보겠습니다. 램프 제조사가 우리가 지정한 색상 범위 내의 모든 색상으로 램프를 생산할 수 있다고 했으므로, 두 목록을 하나로 합치고 싶습니다.

import java.util.Vector;

class Main {
    public static void main(String[] args) {
        Vector<String> color_range = new Vector<>();
        Vector<String> lamp_colors = new Vector<>();

        color_range.add("Blue");
        color_range.add("Black");
        color_range.add("Gray");
        color_range.add("Pink");
        color_range.add("Orange");

        lamp_colors.addAll(color_range);

        System.out.println("Color range: " + color_range);
        System.out.println("Lamp colors: " + lamp_colors);
    }
}

실행 결과:

Color range: [Blue, Black, Gray, Pink, Orange]
Lamp colors: [Blue, Black, Gray, Pink, Orange]

코드는 먼저 색상 범위의 색상들을 color_range 벡터에 추가합니다. 그다음 addAll() 메서드를 사용해 color_range의 모든 색상을 lamp_colors 벡터에 병합했습니다. 마지막 줄에서는 두 벡터의 내용을 콘솔에 출력합니다.

3. 벡터에서 요소 조회하기: get()

get() 메서드는 벡터에서 특정 요소를 가져올 때 사용합니다. get()은 하나의 매개변수, 즀 조회하려는 항목의 인덱스 값을 받습니다.

예를 들어 램프 색상 목록이 알파벳 순으로 정렬되어 있고, 목록의 첫 번째 항목을 가져오고 싶다고 가정해 보겠습니다.

import java.util.Vector;

class Main {
    public static void main(String[] args) {
        Vector<String> lamp_colors = new Vector<>();

        lamp_colors.add("Black");
        lamp_colors.add("Blue");
        lamp_colors.add("Gray");
        lamp_colors.add("Orange");
        lamp_colors.add("Pink");

        String first_element = lamp_colors.get(0);

        System.out.println("First element in list: " + first_element);
    }
}

실행 결과:

First element in list: Black

코드에서는 get() 메서드에 인덱스 0을 지정해 lamp_colors 벡터의 첫 번째 항목을 조회했습니다. 이어서 'First element in list:'라는 메시지와 함께 목록의 첫 번째 요소를 콘솔에 출력했습니다.

4. 벡터에서 요소 제거하기

벡터에서 요소를 제거하는 메서드는 세 가지입니다: remove(), removeAll(), clear().

단일 요소 제거: remove()

remove() 메서드는 벡터에서 하나의 요소를 제거할 때 사용합니다. remove()는 제거하려는 요소의 인덱스 위치를 매개변수로 받습니다.

제조사가 더 이상 주황색 램프를 생산할 수 없다고 통보했다고 가정해 보겠습니다. 이제 판매 색상 목록에서 주황색을 제거해야 합니다.

import java.util.Vector;

class Main {
    public static void main(String[] args) {
        Vector<String> lamp_colors = new Vector<>();

        lamp_colors.add("Black");
        lamp_colors.add("Blue");
        lamp_colors.add("Gray");
        lamp_colors.add("Orange");
        lamp_colors.add("Pink");

        lamp_colors.remove(3);

        System.out.println("New color list: " + lamp_colors);
    }
}

실행 결과:

New color list: [Black, Blue, Gray, Pink]

코드에서는 remove() 메서드를 사용해 인덱스 3번 위치의 항목, 즉 값이 Orange인 항목을 목록에서 제거했습니다. 이어서 수정된 색상 목록을 'New color list:'라는 메시지와 함께 콘솔에 출력했습니다.

전체 요소 제거: removeAll()과 clear()

removeAll()clear() 메서드는 목록의 모든 요소를 제거할 때 사용합니다. 일반적으로는 더 효율적인 clear() 사용이 권장되지만, removeAll()도 사용할 수 있습니다.

예를 들어 제조사가 사업 축소로 인해 더 이상 램프를 생산하지 않기로 결정했다고 가정해 보겠습니다. 새로운 제조사를 찾을 때까지 램프 판매를 중단해야 하므로, 판매 색상 목록 전체를 비워야 합니다.

import java.util.Vector;

class Main {
    public static void main(String[] args) {
        Vector<String> lamp_colors = new Vector<>();

        lamp_colors.add("Black");
        lamp_colors.add("Blue");
        lamp_colors.add("Gray");
        lamp_colors.add("Orange");
        lamp_colors.add("Pink");

        lamp_colors.clear();

        System.out.println("New color list: " + lamp_colors);
    }
}

실행 결과:

New color list: []

코드에서는 clear() 메서드를 사용해 lamp_colors 벡터의 모든 요소를 제거했습니다. 마지막 줄에서는 'New color list:'라는 문구와 함께 빈 벡터를 출력했습니다.

자바 Vector와 ArrayList의 차이점

ArrayList와 Vector는 모두 자바의 List 인터페이스를 구현하며, 동일한 메서드들을 제공합니다. 하지만 두 클래스 사이에는 몇 가지 중요한 차이점이 있습니다.

가장 핵심적인 차이는 동기화(synchronization) 여부입니다. Vector 클래스는 동기화되어 있어(synchronized), 한 번에 하나의 스레드만 코드에 접근할 수 있습니다. 반면 ArrayList는 동기화되어 있지 않아(unsynchronized), 여러 스레드가 동시에 리스트에 접근해 작업할 수 있습니다.

따라서 멀티스레드 환경에서 스레드 안전성이 필요하다면 Vector를, 단일 스레드 환경에서 더 나은 성능이 필요하다면 ArrayList를 선택하는 것이 일반적입니다.

그 외 유용한 Vector 메서드

앞서 소개한 메서드 외에도 벡터에 저장된 데이터를 조작할 수 있는 다양한 메서드들이 있습니다. 주요 메서드를 정리하면 다음 표와 같습니다.

메서드명설명
contains()벡터에서 특정 값을 검색합니다.
iterator()벡터의 요소를 순회(iterate)합니다.
set()벡터 내 특정 요소를 변경합니다.
size()벡터의 길이(크기)를 반환합니다.
toArray()벡터를 배열로 변환합니다.
toString()벡터를 문자열로 변환합니다.

마치며

자바의 Vector 클래스는 List 인터페이스를 통해 데이터를 저장하는 데 사용됩니다. 예를 들어 백화점에서 판매하는 상품 목록이나, 동네 약국에서 판매 가능한 영양제 목록을 저장하는 데 활용할 수 있습니다.

이 글에서는 자바 Vector 클래스의 기본 개념, 벡터 생성 방법, 그리고 Vector와 ArrayList의 주요 차이점을 살펴보았습니다. 또한 예제 코드와 함께 벡터의 내용을 조회하고 조작하는 핵심 메서드들(add(), addAll(), get(), remove(), clear())의 사용법도 확인했습니다.

이제 여러분은 자바에서 Vector 클래스를 능숙하게 활용할 준비가 되었습니다!