13-1. 왜 제네릭을 사용해야 하는가?

제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있다.

컴파일 시 강한 타입 체크를 할 수 있다.

자바 컴파일러는 코드에서 잘못 사용된 타입 때문에 발생하는 문제점을 제거하기 위해, 제네릭 코드에 대해 강한 타입 체크를 한다.

→ 실행 시 타입 에러가 나는 것보다는, 컴파일 시에 미리 타입을 강하게 체크해서 에러를 사전에 방지하는 것이 좋다.

타입 변환(Casting)을 제거한다.

비제네릭 코드는 불필요한 타입 변환을 하기 때문에 프로그램 성능에 악영향을 미친다.

List list = new ArrayList();
list.add("hello");
String str = **(String)** list.get(0); // 타입 변환을 해야 한다.

→ 다음과 같은 제네릭 코드로 수정하면, List에 저장되는 요소를 String 타입으로 국한하기 때문에, 타입 변환을 할 필요가 없어 프로그램 성능이 향상된다.

List**<String>** list = new ArrayList**<String>**();
list.add("hello");
String str = list.get(0); // 타입 변환을 하지 않는다.

13-2. 제네릭 타입(class<T> , interface<T> )

제네릭 타입은 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다.