본문 바로가기
개발 관련 지식/JAVA

제네릭 메소드

by 권태일1147 2020. 4. 6.

제네릭 메소드는 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드를 말한다.

사용 방법은 리턴 타입 앞에 <> 기호를 추가하고 타입 파라미터를 기술한 다음, 리턴 타입과 매개 타입으로 타입 파라미터를 사용하면 된다.

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