1. 제네릭스를 안 쓴 Vector 특징
import java.util.Vector;
public class NoGenericExample {
public static void main(String[] args) {
Vector v = new Vector(); // 제네릭스 없음 → 모든 타입 허용
v.add("Hello");
v.add(123); // 문자열 + 숫자 섞여도 허용됨
System.out.println(v);
// 데이터를 꺼낼 때 직접 형변환 필요
String s = (String) v.get(0);
System.out.println("첫 번째 요소: " + s);
// 잘못된 형변환 (런타임 오류 발생)
String error = (String) v.get(1); // ⚠️ ClassCastException 발생
}
}
- Vector은 내부적으로 데이터를 Object 타입으로 저장
- Object o = v.get(0); => 이렇게 꺼내면 자료형은 object
- String s = (String) v.get(0); => string으로 꺼낼려면 아래처럼 형변환 해야함
- 형변환 오류는 컴파일 오류가 아니라 런타임 오류이다 (ClassCastException)
2. 제네릭스를 사용한 vector
Vector<String> v = new Vector<>();
v.add("Hello");
// v.add(123); // 컴파일 에러 발생
String s = v.get(0); // 형변환 필요 없음, 안전함
- 제네릭을 사용하면 컴파일 단계에서 타입 검증이 이루어지므로, 런타임 오류를 미리 방지할 수 있다.