1. 지네릭을 사용하면 컴파일 타임에 타입을 체크한다.
ArrayList<Fruit> fruitList = new ArrayList<Fruit>(); // ⭕ 정상 실행
ArrayList<Fruit> fruitList = new ArrayList<Apple>(); // ❌ 컴파일 에러
ClassCastException)를 최대한 컴파일 타임에 잡아내기 위한 방법을 고안2. 지네릭을 사용하면 형변환(Casting) 번거로움을 줄여준다.
Object타입 사용과 형 변환을 줄일 수 있다.ArrayList<Integer> list = new ArrayList<Integer>();
list.add(10);
list.add(20);
list.add("30"); // ❌String타입 추가 불가 - 타입 안정성을 높임
Integer i = list.get(0); // ⭕형 변환 생략 가능
// ❌Integer i = (Integer)list.get(0);
class 클래스명<T>{
private T 변수명;
public void set(T 변수명) {...}
public T get() {...}
class 클래스명 {
public <T> 반환타입 메서드명(T 매개변수) {...}
}
class Box<T>{
private T value;
public void setValue(T value){
this.value = value;
}
public T getValue(){
return value;
}
}
public class GenericClassExample{
public static void main(String[] args){
Box<String> strBox = new Box<>(); // T를 String으로 설정
strBox.setValue("Generic Class");
Box<Integer> intBox = new Box<>();
intBox.setValue(0519);
}
}
Box<T>의 T는 타입 매개변수로, 사용자가 원하는 타입을 지정할 수 있음Box<String>처럼 T의 구체적인 타입을 결정<T> 는 메서드 반환 타입 앞에 위치한다.T의 타입은 메서드 호출 시 자동으로 유추된다.class 클래스명 {
public <T> 반환타입 메서드명(T 매개변수) {...}
}
class Utility{
public static <T> void print(T data){
System.out.println("Data: " + data);
}
}
public class GenericMethodExample{
public static void main(String[] args){
Utility.print("Generic Method");
Utility.print(100);
Utility.print(5.19);
}
}