본문 바로가기

Programming/JAVA

제네릭(2) - 멀티타입 파라미터

java logo image

 

 

제네릭을 통해서 타입을 파라미터 형태로 선언하고, 상황에 맞게 지정할 수 있다는 점을 배웠습니다. 그런데 꼭 하나의 파라미터만 선언이 가능한 것일까요? 제네릭은 두 개 이상의 타입 파라미터를 선언해 사용이 가능합니다. 즉, 멀티타입 파라미터를 사용할 수 있다는 의미죠.

 

앞서 살펴본 제네릭 타입 클래스에서의 내용을 상기하며 다음 클래스 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<>();