푸린세스

Generic Test 본문

카테고리 없음

Generic Test

푸곰주 2022. 3. 25. 16:34
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
package ex12;
 
import java.util.AbstractList;
import java.util.ArrayList;
 
public class GenericTest {
 
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<Integer>();//타입정보를 준다. 컴파일러에게 더 많은 정보를 제공
        list.add(10); //list.add(new Integer(10));
        list.add(20);
        list.add("30"); //String을 추가.  //컴파일에러.
        
        Integer i = (Integer)list.get(2);  //integer, integer, String
        //컴파일 ok , Object 를 Integer로 형변환하는거 ok
        //but 실제들어있는 것은 String
        //실행시 ClassCastException 형변환에러
        //컴파일시 에러x 실행시 에러o   : 컴파일러의 한계
        //실제로 뭐가들어있는지 컴파일러가 다 체크할수없다.
        //list.get(2)=>object반환    실행시에러보다 컴파일에러가 훨씬좋다.
        //실행에러는 프로그램이 죽는다..
        
        System.out.println(list);
        //실행시 발생했떤 에러를 컴파일단계에서 잡아줌 - 지네릭스
        //또 꺼낼때 형변환 해줘야하는데 형변환 생략가능
        Integer i2 = list.get(2);
        //타입체크가 강화됨 . 지네릭스덕분에
        
        ArrayList<Object> list2 = new ArrayList<Object>();
        //옛날처럼 쓸려면 여러종류의 객체의 저장 가능
        //뭐하러 <object>붙이나?? 안붙이면 되지 (jdk1.5이전)
        //jdk 1.5이후에는 반드시 <Object> 지네릭스 써줘야한다...
        //좋은코드가 아니다.
        //아무클래스에 쓰는게 아니라 지네릭타입을 써줘야하는 클래스가 있다.
    //선언부:public class ArrayList<E> extends AbstractList<E>
        //ArrayList:일반클래스 -> ArrayList<E> 지네릭클래스로 바뀜
        //클래스 안에 Object타입이 있는것들은 일반클래스=>지네릭클래스로 바뀜
        
    }
 
}
 
cs