제네릭 메서드에 대한 예제를 계속해서 살펴보고 있습니다. 이번에는 멀티 파라미터 타입을 사용하는 경우의 제네릭 메서드 사용에 대해서 살펴보겠습니다.
우선, 멀티타입 파라미터를 사용하는 제네릭 타입(클래스) Pair를 선언합니다.
public class Pair<K, V> {
private K key;
private V value;
// 생성자
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
// Setter
public void setKey(K key) {
this.key = key;
}
public void setValue(V value) {
this.value = value;
}
// Getter
public K getKey() {
return key;
}
public V getValue() {
return value;
}
}
그리고 Util 클래스에는 제네릭 메서드인 compare()를 static으로 선언하도록 하겠습니다. 메서드 compare에는 Pair 인스턴스 두 개를 넣고, 해당 인스턴스들 각각의 key와 value 값을 비교하여 두 인스턴스의 key와 value가 완벽히 같은지 boolean으로 리턴하는 메서드입니다. 즉, 두 인스턴스의 key의 equals와 value의 equals가 모두 true여야 합니다.
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;
}
}
이제 이 compare 메서드를 이용해서 실제로 결과를 출력해 보도록 하겠습니다. 두 번 실행을 해볼 건데, 각각 Integer/String 그리고 String/String으로 키/밸류가 구성된 인스턴스를 만들어보고, 각각의 값이 같은지 다른지 비교해 보도록 하겠습니다. 첫 번째는 타입을 명시적으로 지정하고, 두 번째는 타입을 암묵적으로 지정해 보도록 하겠습니다.
public class ExampleMain {
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.<Integer, String>compare(p1, p2);
if(result1) {
System.out.println("논리적 동등 객체");
} else {
System.out.println("논리적 동등 객체 아님");
}
Pair<String, String> p3 = new Pair<String, String>("person1", "스윙스");
Pair<String, String> p4 = new Pair<String, String>("person2", "스윙스");
boolean result2 = Util.compare(p3, p4);
if(result2) {
System.out.println("논리적 동등 객체");
} else {
System.out.println("논리적 동등 객체 아님");
}
}
}
/* 출력
논리적 동등 객체
논리적 동등 객체 아님
*/
'Programming > JAVA' 카테고리의 다른 글
제네릭(5) - 와일드카드 타입 (0) | 2023.05.06 |
---|---|
제네릭(4) - 제한된 타입 파라미터 선언 (0) | 2023.05.03 |
제네릭(3) - 제네릭 메서드 2 (0) | 2023.05.01 |
제네릭(3) - 제네릭 메서드 1 (0) | 2023.04.27 |
제네릭(2) - 멀티타입 파라미터 (0) | 2023.04.26 |