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 |