1. 제네릭(Generic)이란?
- 클래스, 메서드 등에서 사용되는
<T>타입 매개변수를 의미한다.
- 타입을 미리 지정하지 않고 유연하게 결정 가능하다.
- 코드의 재사용성 및 타입 안정성을 보장 할 수 있게 된다.
1-1. 코드 재사용성 및 타입 안정성 이란
- 코드 재사용성 : 다양한 타입에서 동일한 코드로 재사용이 가능
- 타입 안정성 : 잘못된 타입 사용을 컴파일 시점에서 방지
2. 제네릭 활용
2-1. 제네릭 클래스
- 클래스 선언부에
<T> 가 선언된 클래스로 타입 매개변수를 사용해 다양한 데이터 타입을 안전하게 처리 가능
GenericBox<T> 를 활용해서 String, Integer, Double 등 다양한 타입 저장 가능
public class GenericBox<T> {
private T item;
public GenericBox(T item) {
this.item = item;
}
public T getItem() {
return this.item;
}
}
public class Main {
public static void main(String[] args) {
GenericBox<String> strGBox = new GenericBox<>("ABC");
GenericBox<Integer> intGBox = new GenericBox<>(100);
GenericBox<Double> doubleGBox = new GenericBox<>(0.1);
String strGBoxItem = strGBox.getItem();
Integer intGBoxItem = intGBox.getItem();
Double doubleGBoxItem = doubleGBox.getItem();
System.out.println("strGBoxItem = " + strGBoxItem);
System.out.println("intGBoxItem = " + intGBoxItem);
System.out.println("doubleGBoxItem = " + doubleGBoxItem);
}
}
2-2. 제네릭 메서드
- 메서드 선언부에
<T>가 선언된 메서드
- 클래스 제네릭 타입과 별개로 독립적인 타입 매개변수를 가진다
public class GenericBox<T> {
private T item;
public GenericBox(T item) {
this.item = item;
}
public T getItem() {
return this.item;
}
public void printItem(T item) {
System.out.println(item);
}
public <S> void printBoxItem(S item) {
System.out.println(item);
}
}
public class Main {
public static void main(String[] args) {
GenericBox<String> strGBox = new GenericBox<>("ABC");
GenericBox<Integer> intGBox = new GenericBox<>(100);
strGBox.printItem("ABC");
strGBox.printItem(100);
strGBox.printBoxItem("ABC");
strGBox.printBoxItem(100);
strGBox.printBoxItem(0.1);
}
}