Generic 메서드 선언 방법
- 메서드에만 적용
- 제너릭 메서드<T,R>R method(T t)
- 파라미터 타입과 리턴타입으로 타입 파라미터를 가지는 메서드
- 선언 방법 : 리턴타입 앞에 <> 기호를 추가하고 타입 파라미터를 기술 후 사용함.
일반클래스에서 'Generic 메서드' 만들기
class Util{
public static <K,V> boolean compare(Pair<K, V> p1, Pair<K, V> p2){
boolean keyCompare = p1.getKey().equals(p2.getKey());
boolean valueCompare = p1.getValue().equals(p2.getValue());
return keyCompare&& valueCompare;
}
}
- 멀티타입<K,V>을 가지는 제너릭 클래스
- 키와 값 출력하는 제너릭 메서드 포함
class Pair<K,V> {
private K key;
private V value;
public Pair(K key, V value) {
super();
this.key = key;
this.value = value;
}
public K getKey() {
return key;
}
public void setKey(K key) {
this.key = key;
}
public V getValue() {
return value;
}
public void setValue(V value) {
this.value = value;
}
public <K, V> void displayAll(K key, V value) {
System.out.println(key.toString()+":"+value);
}
}
- Pair<K,V> 멀티타입 => 구체적 타입 지정
public class T03_GenericMethodTest {
public static void main(String[] args) {
Pair<Integer, String> p1 = new Pair<Integer, String>(1, "홍길동");
Pair<Integer, String> p2 = new Pair<Integer, String>(1, "홍길동");
boolean result1 = Util.compare(p1, p2);
System.out.println(result1);
if(result1) {
System.out.println("논리적(의미)으로 동일한 객체임");
}else {
System.out.println("논리적(의미)으로 동일한 객체 아님.");
}
System.out.println("-----------------------------------------------");
Pair<String, String> p3 = new Pair<String, String>("001","홍길동");
Pair<String, String> p4 = new Pair<String, String>("002","홍길동");
boolean result2 = Util.compare(p3, p4);
System.out.println(result2);
if(result2) {
System.out.println("논리적(의미)으로 동일한 객체임");
}else {
System.out.println("논리적(의미)으로 동일한 객체 아님.");
}
System.out.println("-----------------------------------------------");
p1.<String, Integer>displayAll("키값", 1234);
p1.displayAll("키값", 1234);
}
}