제네릭 타입 : 타입을 파라미터로 가지는 클래스와 인터페이스. 선언시 클래스 또는 인터페이스 이름 뒤에 '< >' 부호 붙임. 일반적으로 대문자 한글자만 적는다.


장점

실행시 타입에러가 나는 것을 방지한다.

컴파일 시에 미리 타입을 강하게 체크해서 에러를 방지한다.

타입캐스트시 생기는 속도저하를 없앤다.

 

ArrayList에 저장되는 형태는 Object형태로 들어간다.
1
2
3
4
5
6
7
        List list = new ArrayList();
        list.add("hello");
        list.add("hi");
        strTemp = (String)list.get(0);
        System.out.println(strTemp);
        strTemp = (String)list.get(1);
        System.out.println(strTemp);
cs

이럴 경우 값을 얻을 때 타입케스팅을 명확히 해야하고 시간이 오래 걸린다.


 

1
2
3
4
        List<String> strList = new ArrayList();
        strList.add("hi");
        strTemp = strList.get(0);
        System.out.println(strTemp);
cs

리스트를 만들 때 제네릭을 이용하여 형을 정해주면 타입케스팅을 하지 않아도 되서 시간이 적게 걸린다.


제네릭을 클래스에도 적용할 수 있다.

Box 클래스

 

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

 

 

메인문 내부

 

1
2
3
4
Box<String> box = new Box<String>();
box.set("test");
strTemp = box.get();
System.out.println(strTemp);
cs

 

T부분이 String로 변환되는 예제


제네릭은 여러 개 사용할 수 있다.

 

1
2
3
4
5
6
7
8
9
10
public class Product<T, M> {
    private T kind;
    private M model;
    
    public void setKind(T kind) {this.kind=kind;}
    public void setModel(M model) {this.model=model;}
    
    public T getKind(){return kind;}
    public M getModel(){return model;}
}
cs


제네릭을 메소드에도 적용할 수 있다. 메소드에 적용할 땐 반환타입 앞에 제네릭을 선언하면 된다.

public <T> Box<T> boxing(T t);


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Util {
    public static <T> Box<T> boxing(T t){ 
        Box<T> box = new Box<T>();
        box.set(t);
        return box;
    }
    
    public static <T> boolean setData(T t){ 
        return true;
    }
    
    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


 

1
boolean result1 = Util.<Integer,String>compare(p1, p2);
cs

메소드를 사용할 때 제네릭을 명시적으로 선언해도 매개변수에 제네릭을 사용할 경우 묵시적으로 설정한다.


+ Recent posts