본문으로 바로가기

16_GenericsMethod

category HighJava 2020. 9. 17. 15:08

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package kr.or.ddit.basic;
 
 
 
class Util {
    
    /**
     * 제너릭 메서드<T,R> R method(T t)
     * 
     * 파라미터 타입과 리턴타입으로 타입 파라미터를 가지는 메서드
     * 선언방법 : 리턴타잎 앞에 <> 기호를 추가하고 타입 파라미터를 기술 후 사용함.
     * 
     * @param p1
     * @param p2
     * @return
     */
    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;
 
    }
 
}
 
/**
 * 멀티타입 <K, V> 을 가지는 제너릭 클래스
 *
 * @param <K>
 * @param <V>
 */
class Pair<K, V> {
    private K key;
    private V value;
 
    public Pair(K key, V value) {
        super();
        this.key = key;
        this.value = value;
    }
 
    public K getKey() {
        return key;
    }
 
    public void setKey(K key) {
        this.key = key;
    }
 
    public V getValue() {
        return value;
    }
 
    public void setValue(V value) {
        this.value = value;
    }
 
    // 키와 값 출력하는 메서드
    public <K, V> void displayAll(K key, V value) {
        System.out.println(key.toString() + " : " + value);
    }
 
}
 
public class T02_GenericMethodTest {
    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<StringString> p3 = new Pair<StringString>("001""홍길동");
        Pair<StringString> p4 = new Pair<StringString>("002""홍길동");
 
        boolean result2 = Util.compare(p3, p4);
 
        if (result2) {
            System.out.println("논리적(의미)으로 동일한 객체");
        } else {
            System.out.println("논리적(의미)으로 동일한 객체아님");
        }
 
        // 제너릭 메서드 호출
        p1.<String, Integer>displayAll("키값"1234);
    }
}
 
cs



'HighJava' 카테고리의 다른 글

18.Enum  (0) 2020.09.18
17_Bounded Type Parameter(제한된 타입 파라미터)  (0) 2020.09.17
15_Generics  (0) 2020.09.17
14_Args_가변형 인수  (0) 2020.09.17
13_Properties  (0) 2020.09.17