제네릭 메소드는 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드를 말한다.
사용 방법은 리턴 타입 앞에 <> 기호를 추가하고 타입 파라미터를 기술한 다음, 리턴 타입과 매개 타입으로 타입 파라미터를 사용하면 된다.
public <T> Method<T> method(T t) {...}
제네릭 메소드를 호출하는 코드는 두 가지 방법이 있다.
리턴타입<String> obj = <String>method("string"); // 명시적으로 타입 파라미터를 지정
리턴타입<String> obj = method("string"); // 타입 파라미터를 추정
코드에서 타입 파라미터를 구체적으로 명시하는 방법과 컴파일러가 매개값을 보고 타입을 추정하도록 하는 방법이 있다.
다음은 제네릭 메소드를 사용하는 예제이다.
// Util.java
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;
}
}
// Pair.java
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;
}
}
// Main.java
public class Main {
public static void main(String[] args) {
Pair<Integer, String> p1 = new Pair<Integer, String>(1, "apple");
Pair<Integer, String> p2 = new Pair<Integer, String>(1, "apple");
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>("user1", "홍길동");
boolean result2 = Util.compare(p3, p4); // 컴파일러가 타입을 추정
if(result2) {
System.out.println("논리적으로 동등한 객체입니다.");
} else {
System.out.println("논리적으로 등동하지 않은 객체입니다.");
}
}
}
'개발 관련 지식 > JAVA' 카테고리의 다른 글
제네릭 타입의 상속과 구현 (0) | 2020.04.06 |
---|---|
제한된 타입 파라미터 (0) | 2020.04.06 |
제네릭 (0) | 2020.04.06 |
멀티 스레드 개념 (0) | 2020.04.04 |
예외 처리 (0) | 2020.04.03 |