public 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;
}
}
public class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public void setKey(K key) { this.key = key;}
public void setValue(V value) { this.value = value;}
public K getKey() { return key; }
public V getValue() { return value;}
}
public class CompareMethodExample {
public static void main(String[] args) {
Pair<Integer, String> p1 = new Pair<>(1, "사과");
Pair<Integer, String> p2 = new Pair<>(1, "사과");
//명시적 타입파라미터 사용
boolean result1 = Util.<Integer, String>compare(p1, p2);
if(result1) {
System.out.println("논리적으로 동등한 객체입니다.");
}else {
System.out.println("논리적으로 동등하지 않는 객체입니다.");
}
Pair<String, String> p3 = new Pair<String, String>("user1", "김동연");
Pair<String, String> p4 = new Pair<String, String>("user2", "김동연");
// 타입파라미터 사용생략. (매개변수의 데이터를 보고 타입추정)
boolean result2 = Util.compare(p3, p4);
if(result2) {
System.out.println("논리적으로 동등한 객체입니다.");
}else {
System.out.println("논리적으로 동등하지 않는 객체입니다.");
}
// Pair 제네릭 클래스는 타입파라미터에 어떤 타입이든 모두 사용이 가능한 상태.
// 아래 구문은 모든 데이타타입이 사용가능한 의미로 작성.
Pair<Double, String> p5 = new Pair<Double, String>(10.5, "테스트");
Pair<String, String> p6 = new Pair<String, String>("테스트", "테스트");
Pair<String, Double> p7 = new Pair<String, Double>("테스트", 10.5);
}
}
'JAVA' 카테고리의 다른 글
제네릭 와일드카드 타입 (0) | 2022.10.12 |
---|---|
제한된 타입 파라미터 (0) | 2022.10.12 |
제네릭 메소드 (0) | 2022.10.12 |
멀티 타입 파라미터 (0) | 2022.10.12 |
컬렉션 프레임웤 TreeMap (0) | 2022.10.11 |