대부분의 프로그래밍 언어는 제네릭(Generic)을 제공한다.
먼저 제네릭이 왜 필요한지 예제를 통해 알아보자.
package generic.ex1;
public class BoxMain1 {
public static void main(String[] args) {
IntegerBox integerBox = new IntegerBox();
integerBox.set(10); // 오토박싱
Integer integer = integerBox.get();
System.out.println("integer = " + integer);
StringBox stringBox = new StringBox();
stringBox.set("hello");
String str = stringBox.get();
System.out.println("str = " + str);
}
}
package generic.ex1;
public class IntegerBox {
private Integer value;
public void set(Integer value) {
this.value = value;
}
public Integer get() {
return value;
}
}
package generic.ex1;
public class StringBox {
private String value;
public void set(String value) {
this.value = value;
}
public String get() {
return value;
}
}
코드를 보면 숫자를 보관하는 IntegerBox를 만들고 그곳에 값을 보관했다.
또, 문자를 보관하는 StringBox를 만들고 문자열을 보관하였다.
하지만 새로운 타입을 저장하려면 그에 맞는 박스를 계속 만들어야 한다.
예를 들어 다음과 같은 클래스들이 필요할 수 있다.
실제로 각 클래스의 코드를 살펴보면 타입만 다를 뿐 대부분의 로직은 동일하다.
만약 담아야 하는 타입이 수십개라도 한다면, 그 것들을 일일히 만들 수 없다.
그렇다면 이러한 문제를 해결하기 위해 어떻게 해야할까?
자바는 이러한 문제를 해결하기 위해 제네릭(Generic) 을 제공한다.
그 내용에 관해서는 하나하나 알아보도록 하자.