제네릭을 통해서 타입을 파라미터 형태로 선언하고, 상황에 맞게 지정할 수 있다는 점을 배웠습니다. 그런데 꼭 하나의 파라미터만 선언이 가능한 것일까요? 제네릭은 두 개 이상의 타입 파라미터를 선언해 사용이 가능합니다. 즉, 멀티타입 파라미터를 사용할 수 있다는 의미죠.
앞서 살펴본 제네릭 타입 클래스에서의 내용을 상기하며 다음 클래스 Product를 살펴보겠습니다. 타입 파라미터를 T와 M, 두 가지를 선언하고 T와 M에 대해 각각 필드, getter, setter를 선언했습니다.
public class Product<T, M> {
private T kind;
private M model;
public T getKind() {
return this.kind;
}
public M getModel() {
return this.model;
}
public void setKind(T kind) {
this.kind = kind;
}
public void setModel(M model) {
this.model = model;
}
}
public class TV {
}
public class Car {
}
public class ExampleMain {
public static void main(String[] args) {
Product<TV, String> product1 = new Product<TV, String>();
product1.setKind(new TV());
product1.setModel("스마트TV");
TV tv = product1.getKind();
String tvModel = product1.getModel();
Product<Car, String> product2 = new Product<Car, String>();
product2.setKind(new Car());
product2.setModel("하이브리드");
Car car = product2.getKind();
String carModel = product2.getModel();
System.out.println(tvModel);
System.out.println(carModel);
}
}
/* 출력
스마트TV
하이브리드
*/
알아두어야 할 사실이 하나 있습니다. 제네릭을 활용해 인스턴스를 생성하는 과정에서 타입 파라미터를 두 번 반복해서 입력하게 됩니다. 하지만 자바 7부터 타입 파라미터의 중복 작성을 제거할 수 있습니다. <>만 작성하게 되는데, 아래와 같은 방식으로 사용하면 됩니다.
// 자바 7이전
Product<TV, String> product1 = new Product<TV, String>();
// 자바 7이후
Product<TV, String> product1 = new Product<>();
'Programming > JAVA' 카테고리의 다른 글
제네릭(3) - 제네릭 메서드 2 (0) | 2023.05.01 |
---|---|
제네릭(3) - 제네릭 메서드 1 (0) | 2023.04.27 |
제네릭(1) - 제네릭 타입 2 (0) | 2023.04.25 |
제네릭(1) - 제네릭 타입 1 (0) | 2023.04.25 |
중첩 클래스&인터페이스(5) - 익명 객체 7 (0) | 2023.04.23 |