Java 1.5 부터 나온 개념 : Generic이 나오기 전까지는 참조형 변수 타입을 Object로 받을 수 밖에 없었다.
기능: 자료형을 결정짓지 않고 틀을 만들어 두는 것을 말함 (c++에서는 템플릿 이라고 함)
형태: Object(참조형 타입) 자리에 T들어감 → Generic
그래서 자료형의 정보를 Object 대신 T로 작성해 비워 두고 인스턴스 생성시 참조 타입을 결정함
등장 배경: Generic이전의 코드에서 Object로 참조 변수를 선언했을 때 발생하는 문제들을 Generic을 사용함으로써 컴파일 단계에서 잡아줄 수 있도록 했음
Box<Apple> aBox = new Box<Apple>(); // T를 Apple로 결정
Box<Orange> oBox = new Box<Orange>(); // T를 Orange로 결정
aBox.set(new Apple()); // 사과를 상자에 담는다.
oBox.set(new Orange()); // 오렌지를 상자에 담는다.
Apple ap = aBox.get(); // 사과를 꺼내는데 형 변환 하지 않는다.
Orange og = oBox.get(); // 오렌지를 꺼내는데 형 변환 하지 않는다.
System.out.println(ap); // 출력 : 이것은 사과 입니다.
System.out.println(og); // 출력 : 이것은 오렌지 입니다.
class Box<T> {
private T ob;
public void set(T o) {
ob = o;
}
public T get() {
return ob;
}
}
class Apple {
@Override
public String toString() {
return "이것은 사과 입니다.";
}
}
class Orange {
@Override
public String toString() {
return "이것은 오렌지 입니다.";
}
}
Person<String, Integer> p = new Person<String, Integer>();
p.set("홍길동", 25);
System.out.println(box); //출력 : 홍길동 25 세 입니다.
class Person<S, I> {
private S name;
private I age;
public void set(S name, I age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + " " + age + " 세 입니다.";
}
}