본문 바로가기

Programming/JAVA

제네릭(3) - 제네릭 메서드 3

java logo image

 

 

 

제네릭 메서드에 대한 예제를 계속해서 살펴보고 있습니다. 이번에는 멀티 파라미터 타입을 사용하는 경우의 제네릭 메서드 사용에 대해서 살펴보겠습니다. 

 

 


 

 

우선, 멀티타입 파라미터를 사용하는 제네릭 타입(클래스) 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("논리적 동등 객체 아님");
		}
			
	}
}

/* 출력
논리적 동등 객체
논리적 동등 객체 아님
*/