연습문제

12-1 지네릭스란? Generics

컴파일 때 타입을 체크하는데에 한계가 있었음 이를 해결해주는 것이 지네릭스

object[] obj;  // 모든 종류 객체저장가능

ArrayList<Tv> tvList = new ArrayList<Tv>();

tvList.add(new Tv());  // OK
tvList.add(new Audio());  // 컴파일 에러, Tv외에 다른 타입은 저장 불가
// 형변환 안해도 됨
import java.util.ArrayList;

public class GenericsTest {

	public static void main(String[] args) {
		ArrayList list = new ArrayList();
		list.add(10);
		list.add(20);
		list.add("30");  // String 추가
		
		Integer i = (Integer)list.get(2);
		
		System.out.println(list);
	}
}

// ClassCastException - 형변환 에러 발생 (실행시 발생하는 에러)
// 컴파일러는 Object안에 무엇이 들어있는지까지 확인할 수 없음
// 이러한 실행시 발생하는 에러를 컴파일 에러로 바꿔주는 것이 지네릭스

ArrayList list = new ArrayList(); JDK 1.5이전에는 이렇게 써도 됐지만

ArrayList<Object> list = new ArrayList<Object>(); 이제는 이렇게 써야한다.

에러가 나지는 않지만 무조건 이렇게 써야한다.

ArrayList 일반클래스 에서 ArrayList<E> 지네릭클래스로 바뀌었다.

프로그램을 실행중에 에러가 발생해서 프로그램이 죽는 것 보다 프로그램을 만들 때 발생하여 고칠 수 있는 컴파일 에러가 더 좋기 때문이다.

Untitled

따라서 ClassCastException, 실행 중 발생하는 형변환을 컴파일 단에서 체크할 수 있게 해준 것이 지네릭스다.