클래스나 메소드에서 사용할 내부 데이터 타입을 외부에서 지정하는 기법

제네릭이란?

// 지네릭 사용x
class Box {
	Object item;
	
	void setItem(Object item) { this.item = item; }
	Object getItem() { return item; }
}

// 지네릭 사용
class Box<T> { // 지네릭 타입 T 선언
	T item;

	void setItem(T item) { this.item = item; }
	T getItem() { return item; }
} 

제네릭을 사용하는 이유

컴파일 단계에서 자료형을 체크해주는 도구

[ 리빙포인트 ]

컴파일 때까지만 제너릭 타입을 체크하고 런타임에는 제너릭 타입을 삭제함( 런타임 때는 제너릭 타입 정보가 없음 )

왜냐면, 자바 하위 버전에는 제네릭 타입을 체크하지 않으

제네릭 타입이란

타입을 피라미터로 가지는 클래스와 인터페이스를 뜻함

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

예시)

public class Box<T> {
	private T t;
	public T get() { return t; }
	public void set(T t) { this.t = t; }

// Box<T> 객체 생성하는 경우
Box<String> strBox = new Box<String>();
Box<Integer> intBox = new Box<Integer>();

멀티 타입 파라미터