본문 바로가기
기초 및 언어/▶ Java&JSP

32. Vector와 Enumeration

by 류딩이 2025. 8. 26.

Java Vector와 Enumeration 기초 

Enumeration은 사실상 “Vector, Hashtable 전용”

 

 

import java.util.Enumeration;
import java.util.Vector;

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

        System.out.println(v.size()); // 0
        v.add("봄");
        v.add("여름");
        v.add("봄");
        v.add("겨울");

        System.out.println(v.size()); // 4
        System.out.println(v); // [봄, 여름, 봄, 겨울]

        String s = v.get(0); // 0번째 인덱스 가져오기
        System.out.println(s); // 봄

        System.out.println("============Enumeration============");
        Enumeration<String> enu = v.elements(); // 모든 요소에 대한 Enumeration 획득
        while (enu.hasMoreElements()) {
            String e = enu.nextElement();
            System.out.println(e);
        }

        for (String s2 : v) { // 향상된 for 문
            System.out.println(s2);
        }

        System.out.println("============for문===========");
        for (int i = 0; i < v.size(); i++) { // 인덱스 기반 for 문
            String s2 = v.get(i);
            System.out.println(s2);
        }
    }
}

1) Vector 한눈에 보기

  • 레거시 컬렉션(JDK 1.0부터 존재)으로 **동기화(synchronized)**가 기본이라 스레드 안전합니다. 그만큼 단일 스레드 환경에서는 ArrayList보다 성능이 느릴 수 있음.
  • 순서를 유지하고 중복을 허용합니다.
  • **용량(capacity)**이 꽉 차면 보통 2배로 증가합니다(별도 증가량 설정이 없는 경우). 초깃값은 일반적으로 10.
  • 오늘날 새 코드에서는 대체로 **ArrayList + 필요 시 Collections.synchronizedList**를 권장하며, Vector는 기존 코드 호환 목적이 클 때 사용합니다.

2) 자주 쓰는 Vector 메서드 표

분류 메서드 설명

분류 메서드 설명
추가 add(E e) 맨 끝에 요소 추가
  add(int index, E e) 특정 위치에 요소 삽입
     
조회 get(int index) 지정한 인덱스의 요소 반환
  firstElement() 첫 번째 요소 반환
  lastElement() 마지막 요소 반환
  elementAt(int index) 지정 인덱스 요소 반환 (레거시)
     
검색 contains(Object o) 해당 요소가 포함되어 있는지 확인
  indexOf(Object o) 앞에서부터 해당 요소의 인덱스 반환
  lastIndexOf(Object o) 뒤에서부터 해당 요소의 인덱스 반환
     
삭제 remove(Object o) 해당 객체 삭제
  remove(int index) 지정 인덱스 요소 삭제
  clear() 모든 요소 삭제
     
상태 size() 요소 개수 반환
  isEmpty() 비어 있는지 여부 확인
     
순회 elements() Enumeration 객체 반환
  iterator() Iterator 객체 반환

✅ elementAt(int)은 레거시 메서드로, 최신 코드에서는 get(int) 사용 권장.


3) 요소 순회(Iteration) 3가지 방법

3-1. Enumeration

Enumeration<String> enu = v.elements();
while (enu.hasMoreElements()) {
    String e = enu.nextElement();
    System.out.println(e);
}

3-2. 향상된 for 문 (for-each)

for (String s2 : v) {
    System.out.println(s2);
}

3-3. 인덱스 기반 for 문

for (int i = 0; i < v.size(); i++) {
    String s2 = v.get(i);
    System.out.println(s2);
}

 


💡 ArrayList에서는 어떻게 순회할까?

ArrayList에는 elements()가 없어서 Enumeration을 직접 사용할 수 없습니다.

대신 Iterator/for-each/for문을 사용합니다.

ArrayList<String> list = new ArrayList<>();
list.add("봄"); list.add("여름"); list.add("가을");


// 1) Iterator
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}


// 2) for-each
for (String s : list) {
System.out.println(s);
}


// 3) 인덱스 for
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}

 

4) Enumeration vs Iterator vs for-each

구분 사용 컬렉션 주요 메서드 수정(삭제) 지원 제네릭 특징

구분 사용 컬렉션 주요 메서드 수정(삭제)지원 제너릭 특징
Enumeration 주로
Vector/
Hashtable
hasMoreElements(),
nextElement()
직접 삭제 불가 가능 레거시 API. 새 코드엔 잘 쓰지 않음
Iterator 대부분의 컬렉션 hasNext(),
next(),
remove()
remove() 가능 가능 현대적 표준 반복자
for-each Iterable 전반 내부적으로 Iterator 사용 직접 삭제 불가 제네릭 기반 가장 간단·가독성 좋음

5) 실행 결과 예시

0
4
[봄, 여름, 봄, 겨울]
봄
============Enumeration============
봄
여름
봄
겨울
봄
여름
봄
겨울
============for문===========
봄
여름
봄
겨울

6) 정리

  • Vector는 스레드 안전, 순서 유지, 중복 허용.
  • Enumeration은 레거시 반복자이며, Vector의 elements()로만 얻을 수 있음.
  • 최신 자바 스타일: ArrayList + for-each/Iterator가 기본, Vector는 레거시/특수 케이스.

'기초 및 언어 > ▶ Java&JSP' 카테고리의 다른 글

34. HashMap  (1) 2025.08.26
33. HashSet  (0) 2025.08.26
31. ArrayList  (5) 2025.08.24
30. 컬렉션(Collection)  (0) 2025.08.24
29. Generic  (1) 2025.08.22