제네릭

제네릭은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다.
제네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일시의 타입체크를 해주는 기능이다.

사용해야 하는 이유

잘못된 타입이 될 수 있는 문제를 컴파일 과정에서 제거할수 있다. 자바 컴파일러는 코드에서 잘못 사용된 타입 때문에 발생하는 문제점을 제거하기 위해 제네릭 코드에 대한 강한 타입 체크를 한다.
실행 시 타입에러가 나는 것보다는 컴파일 시에 미리 타입을 강하게 체크해서 에러를 사전에 방지하는 것이 좋다. 또 제네릭 코드를 사용하면 타입을 국한하기 때문에 요소를 찾아올 때 타입 변환을 할 필요가 없어 프로그램 성능이 향상되는 효과를 얻을 수 있다.
예시

ArrayList list = new ArrayList(); //제네릭을 사용하지 않을경우
list.add("test");
String temp = (String) list.get(0); //타입변환이 필요함
        
ArrayList<String> list2 = new ArrayList(); //제네릭을 사용할 경우
list2.add("test");
temp = list2.get(0); //타입변환이 필요없음

사용법

제네릭 타입은 타입을 파라미터로 가지는 클래스와 인터페이스이다. 제네릭 타입은 클래스 또는 인터페이스 이름 뒤에 < >를 쓰고 사이에 타입 파라미터가 위치한다.

public class 클래스명<T> {...}
public interface 인터페이스명<T> {...}

타입인자

타입인자 설명
T Type
E Element
K Key
N Number
V Value
R Result