
제네릭(Generic)은 클래스나 메서드에서 사용할 데이터 타입을 컴파일 단계에서 지정된 타입 매개변수를 사용하여 타입 체크를 수행하고, 컴파일 단계에서 타입 불일치를 처리할 수 있다.
즉, 실행시에 사용자가 선택한 데이터 타입으로 클래스나 메서드를 사용할 수 있고, 재사용성과 안정성이 높아진다.
public class Box<T> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
public class Main {
public static void main(String[] args) {
Box<String> stringBox = new Box<>();
stringBox.setItem("Hello");
System.out.println(stringBox.getItem());
Box<Integer> intBox = new Box<>();
intBox.setItem(123);
System.out.println(intBox.getItem());
}
}
제네릭 메서드 예시
public class Utility {
public static <T> void printArray(T[] array) {
for (T item : array) {
System.out.println(item);
}
}
}
public class Main {
public static void main(String[] args) {
Integer[] intArray = {1, 2, 3};
String[] strArray = {"A", "B", "C"};
Utility.printArray(intArray); // 출력: 1, 2, 3
Utility.printArray(strArray); // 출력: A, B, C
}
}
제네릭과 상속을 잘 활용한다면 CRUD같이 객체의 기본적인 공통기능들을 한곳에 정의하고, 공통 CRUD로직을 만들 수 있다.