hyeonga_code

Java_65_Generic_제네릭 본문

Java

Java_65_Generic_제네릭

hyeonga 2023. 10. 26. 06:59
반응형


- Generic
    - 필요한 데이터의 자료형을 선언합니다.
    - 클래스/메소드에 데이터 타입을 매개 변수로 넘겨줄 수 있습니다.
    - 참조형 데이터 타입만 가능합니다.
        ArrayList<String>
        -업 캐스팅을 하지 않아도 자료형을 알고 있으므로 바로 꺼내올 수 있음
            String name = list.get(i);
    -list 타입의 Collection = index로 데이터 꺼내서 사용 가능
        for (Object obj : list) {
            // 확장 for 문
            String name = (Strong)obj;
            System.out.println(name);
        }
    >>> jdk 1.4
    add(Object o)   : 모든 객체를 등록이 가능한 메소드입니다.
    get() : Object  : 반환타입이 Object이므로 항상 형변환이 필요했습니다.

    >>> jdk 1.5
        - generic 추가되었습니다.
        - 지정하는 Element 타입으로 반환합니다.
    add(E e)
    get() : E
        - E : Element Object _ 지정한 객체의 타입
        - K : Key Object _ 지정한 키 값
        - V : Value Object _ 지정한 값의 오브젝트
        - T : Type Object _ 지정한 타입


'adv.collection_ex' 패키지 생성

'ListEx.java' 클래스 생성
=====

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
package adv.collection_ex;
 
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
 
public class ListEx {
 
    public static void main(String[] args) {
        
        // List
        List<Integer> array_list = new ArrayList();        
            // Integer형 데이터를 저장하는 리스트를 선언합니다.
            /*
                 > Generic_제네릭 = 일반화
                    List< ? >
                    - 리스트에 받을 데이터의 타입을 지정해야합니다.    
                    - 클래스/메소드에 데이터 타입을 매개 변수로 보낼 수 있습니다.
                    - 참조형 데이터 타입만 가능합니다.
             */
        
        for(int i=1; i<=5; i++) {
            array_list.add(i);            // 데이터를 추가할 때마다 크기가 늘어납니다.
        }
 
        for(Integer arr : array_list) {
            System.out.println("arr[" + arr + "] : " + arr);
        }
        
        // 리스트 크기
        System.out.println("array_list.size() : " + array_list.size());
            /*    array_list.size() : 5    */
        
        // 데이터 인덱스
        System.out.println("array_list.indexOf(3) : " + array_list.indexOf(3));
            /*    array_list.indexOf(3) : 2    */
        
        // 데이터 수정
        array_list.set(07);    // array_list[0] 데이터를 7로 변경합니다.
 
            for(Integer arr : array_list) {
                System.out.print(arr);
            }
                /*    72345    */
            System.out.println();
            
        // 데이터 삭제
        array_list.remove(3);    // array_list[3] 데이터를 삭제합니다.
 
            for(Integer arr : array_list) {
                System.out.print(arr);
            }
            System.out.println();
                /*    7235 */
            
        // 데이터 전체 삭제
        array_list.clear();        // array_list 모든 데이터를 삭제합니다.
 
        // 리스트 연결
        
        List<Integer> linked_list = new LinkedList<>();    // 사용법은 ArrayList와 동일합니다.
        linked_list.add(1);
        
        System.out.println(linked_list);
            /*    [1]    */
    }
}




=====

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.*;
 
public class ex0325 {
    public static void main(String[] args) {
        Hashtable<StringString> map = new Hashtable<>();
        
        map.put("data 1""type 1");
        map.put("data 2""type 2");
        map.put("data 3""type 3");
        map.put("data 4""type 4");
        map.put("data 5""type 5");
        
        Enumeration<String> enu = map.keys();
        // 키 값 모두 가져오기
        while(enu.hasMoreElements()) {
            String key = enu.nextElement();
            String value = map.get(key);
            System.out.println(key + " : " + value);
        }
    }
}
 




=====

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
97
98
99
100
101
102
103
104
105
106
107
108
109
package sungjuk;
import java.util.*;
 
public class SungJukProImpl implements SungJukPro{
    private ArrayList<SungJuk> list;
    // SungJuk으로 Generic
    private Scanner in;
    
    public SungJukProImpl() {
        list = new ArrayList<>();
        in = new Scanner(System.in);
    }
    @Override
    public void input() {
        System.out.print("이름을 입력 : ");
        String name = in.next();
        System.out.print("국어점수를 입력 : ");
        int kor = in.nextInt();
        System.out.print("영어점수를 입력 : ");
        int eng = in.nextInt();
        SungJuk sj = new SungJuk(name, kor, eng);
        list.add(sj);
    }
    
    protected SungJuk isName(String name) {
        for (SungJuk sj : list) {
            if (sj.getName().equals(name)) {
                return sj;
            }
        }
        return null;
        /*
         * Iterator it = list.iterator(); 
         * while(it.hasNext()) { 
         *      Object obj = it.next();
         *      SungJuk sj = (SungJuk)obj; 
         *      if (sj.getName().equals(name)) { 
         *     return sj; 
         *      } 
         * }
         * return null;
         */
    }
    
    protected void rank() {
        for (SungJuk sj1 : list) {
            sj1.clearRank();
            for (SungJuk sj2 : list) {
                if (sj1.getTot() < sj2.getTot()) {
                    sj1.plusRank();
                }
            }    
        }
    }
 
    @Override
    public void view() {
        rank();
        for(SungJuk sj : list) {
            sj.disp();
        }
        /*
        Iterator it = list.iterator();
        while(it.hasNext()) {
            Object obj = it.next();
            SungJuk sj = (SungJuk)obj;
            sj.disp();
        }
        */
    }
 
    @Override
    public void edit() {
        System.out.print("수정할 회원의 이름 : ");
        String name = in.next();
        SungJuk sj = isName(name);
        if (sj == null) {
            System.out.println(name+"님은 저희 학생이 아닙니다.");
        }else {
            System.out.println("현재 "+name+"님의 국어점수는 " + sj.getKor()+"점 입니다.");
            System.out.print("수정하실 국어점수 : ");
            sj.setKor(in.nextInt());
            System.out.println("현재 "+name+"님의 영어점수는 " + sj.getEng()+"점 입니다.");
            System.out.print("수정하실 영어점수 : ");
            sj.setEng(in.nextInt());
            sj.setTot();
            System.out.println(name+" 학생의 정보를 수정하였습니다.");
        }        
    }
 
    @Override
    public void delete() {
        System.out.print("삭제할 학생의 이름 : ");
        String name = in.next();
        SungJuk sj = isName(name);
        if (sj == null) {
            System.out.println(name+"님은 저희 학생이 아닙니다.");
        }else {
            System.out.println(name+"학생을 삭제합니다.");
            list.remove(sj);
        }
    }
 
    @Override
    public void exit() {
        System.out.println("프로그램을 종료합니다.");
        System.exit(0);        
    }
}


















































반응형

'Java' 카테고리의 다른 글

Java_67_Collection_Map  (0) 2023.10.27
Java_66_Collection_Set, List, Queue, Map  (0) 2023.10.26
Java_64_Stream_Byte 입출력  (0) 2023.10.26
Java_63_Scanner  (0) 2023.10.25
Java_62_Calendar 클래스, 날짜 클래스  (0) 2023.10.25