chapter13. 제네릭


13.4 제네렉 메소드(<T,R> R method(T t))


- 매개변수 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드를 말한다

- 제네릭 메소드 선언 방법

// 리턴 타입 앞에 "<>" 기호를 추가하고 타입 파라미터를 기술한다

// 타입 파라미터를 리턴타입과 매개변수에 사용한다


- 제네릭 메소드를 호출하는 두 가지 방법 // 2번째방법을 더 많이씀


 Util 클래스

1
2
3
4
5
6
7
8
9
package sec04.exam01_generic_method;
 
public class Util {
    public static <T> Box<T> boxing(T t) {
        Box<T> box = new Box<T>();
        box.set(t);
        return box;
    }
}
cs

Box 클래스

1
2
3
4
5
6
7
package sec04.exam01_generic_method;
 
public class Box<T> {
    private T t;
    public T get() { return t; }
    public void set(T t) { this.t = t; }
}
cs

 제네릭 메소드 호출 // 실행 클래스

1
2
3
4
5
6
7
8
9
10
11
package sec04.exam01_generic_method;
 
public class BoxingMethodExample {
    public static void main(String[] args) {
        Box<Integer> box1 = Util.<Integer>boxing(100); // 첫번째 방법
        int intValue = box1.get();
        
        Box<String> box2 = Util.boxing("홍길동"); // 두번째 방법
        String strValue = box2.get();
    }
}
cs


 Util 클래스

1
2
3
4
5
6
7
8
9
package sec04.exam02_generic_method;
 
public class Util { // static 다음에 K,V가 나온다고 선언
    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;
    }
}
cs

 Pair 클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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; }
}
cs
 제네릭 메소드 호출 // 실행 클래스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package sec04.exam02_generic_method;
 
public class CompareMethodExample {
    public static void main(String[] args) {
        Pair<Integer, String> p1 = new Pair<>(1"사과"); // <Integer, String>
        Pair<Integer, String> p2 = new Pair<>(1"사과"); // <Integer, String>
        boolean result1 = Util.<Integer, String>compare(p1, p2); // 구체적인 타입을 명시적으로 지정(방법 1)
        if(result1) {
            System.out.println("논리적으로 동등한 객체입니다.");
        } else {
            System.out.println("논리적으로 동등하지 않는 객체입니다.");
        }
        
        Pair<StringString> p3 = new Pair<>("user1""홍길동"); // <StringString>
        Pair<StringString> p4 = new Pair<>("user2""홍길동"); // <StringString>
        boolean result2 = Util.compare(p3, p4);
        if(result2) {
            System.out.println("논리적으로 동등한 객체입니다."); // 구체적인 타입을 추정(방법 2)
        } else {
            System.out.println("논리적으로 동등하지 않는 객체입니다.");
        }
    }
}
cs


Posted by 너래쟁이
: