▼정답
클래스 내부에서 타입을 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미
1. 제네릭을 사용하면 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지할 수 있다.
2. 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없다. 즉, 관리하기가 편하다.
3. 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아진다.
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 Apple1 {
public String toString() {
return "Apple";
}
}
class Orange1 {
public String toString() {
return "Orange";
}
}
class BoxTest<T> { // <Apple> 을 받는다.
// <T> : 타입 매개변수(Type Parameter)
// 타입 인자(Type Argument)
private T ob;
public void set(T o) {
ob = o;
}
public T get() {
return ob;
}
}
Person2<String, Integer> p = new Person2<String, Integer>();
p.set("홍길동", 25);
System.out.println(p); //출력 : 홍길동 25 세 입니다.
▼정답
package Generic;
class Person2<L, R> {
private L left; // 왼쪽 수납 공간
private R right; // 오른쪽 수납 공간
public void set(L o, R r) {
left = o;
right = r;
}
@Override
public String toString() {
return left + " & " + right + "세 입니다.";
}
}
public class GenericTest2 {
public static void main(String[] args) {
Person2<String, Integer> p = new Person2<String, Integer>();
p.set("홍길동", 25);
System.out.println(p); // 출력 : 홍길동 25 세 입니다.
}
}