package sec04_exam02_generic_method;
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; }
}
package sec04_exam02_generic_method;
public class Utill {
//제너릭 메소드 정의 : 다양한 데이터 타입을 사용하고 싶은경우 (여기선 compare 메소드)
//boolean = 리턴타입 , compare = 메소드명()
//비교목적: 하나의 데이터타입에 해당하는 의미만 비교목적으로 사용했었는데
//제너릭인 경우에는 여러 데이터타입들 비교 목적으로 사용 가능하다 (코드의 간소화)
//제너릭이 없을경우 경우의 수만큼 코드를 만들어서 사용해야한다.
public static <K, V> boolean compare(Pair<K, V> p1,Pair<K, V> p2) {
boolean keyCompare = p1.getKey().equals(p2.getKey());
boolean valueCompare = p1.getKey().equals(p2.getKey());
return keyCompare && valueCompare;
}
}
package sec04_exam02_generic_method;
public class CompareMethodExample {
public static void main(String[] args) {
//p1,p2는 힙영역 기억장소에 생성된 객체가 다르므로 주소가 다르다.
//Pair<Integer, String> p1 = new Pair<Integer, String>(1, "사과");
//뒷쪽 타입 파라미터는 생략가능
Pair<Integer, String> p1 = new Pair<>(1, "사과");
Pair<Integer, String> p2 = new Pair<>(1, "사과");
boolean result1 = Utill.<Integer, String>compare(p1, p2);
if(result1) {
System.out.println("논리적으로 동등한 객체입니다.");
}else {
System.out.println("논리적으로 동등하지 않은 객체입니다.");
}
Pair<String, String> p3 = new Pair<String, String>("user", "홍길동");
Pair<String, String> p4 = new Pair<String, String>("user2", "홍길동");
boolean result2 = Utill.<String, String>compare(p3, p4);
if(result2) {
System.out.println("논리적으로 동등한 객체입니다.");
}else {
System.out.println("논리적으로 동등하지 않은 객체입니다.");
}
}
}
// Pair 제네릭 클래스는 타입파라미터에 어떤 타입이든 모두 사용이 가능한 상태.
// 아래 구문은 모든 데이터타입이 사용 가능하다.
Pair<Double, Long> p5 = new Pair<Double, Long>(10.5, "테스트");
Pair<String, String> p6 = new Pair<Double, Long>("테스트", "테스트");
Pair<String, Double> p7 = new Pair<Double, Long>("테스트", 10.5);