[자바] 제네릭스

cloudbread·2025년 10월 19일

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); // 형변환 필요 없음, 안전함
  • 제네릭을 사용하면 컴파일 단계에서 타입 검증이 이루어지므로, 런타임 오류를 미리 방지할 수 있다.
profile
잡다한거 다 공부중....

0개의 댓글