제너릭 사용 시 장점


1. 컴파일시 강한 타입체크

2. 타입변환을 제거



장점을 제너릭을 사용하지 않을 때와 제너릭을 사용했을 때

코드가 어떻게 달라지는지 직접 보면서 살펴보자.



제너릭을 사용하지 않고 클래스 정의


1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
public class NoGenericBox {
    
    /*
     * 제너릭을 사용하지 않은 클래스
     * Object는 최상위 클래스로 어떤 타입이라도 담을 수 있다.
     * 하지만 다른 타입의 변수에 담을려면 타입변환이 필요하다.
     */
    
    private Object object;
    public void set(Object object) { this.object = object; }
    public Object get() { return object; }
}
 
cs



제너릭을 사용하지 않은 객체에 String을 넣고 빼보기


1
2
3
4
5
6
7
8
9
10
11
12
public class NoGenericExample {
    public static void main(String[] args) {
        NoGenericBox box = new NoGenericBox();
        
        box.set("배"); 
        //object에 '배'가 담김 --> Object타입
        
        String fruit = (String)box.get(); 
        //'배'를 String으로 형변환이 필요
    }
}
 
cs



제너릭을 사용한 클래스 정의


1
2
3
4
5
6
7
8
9
10
11
public class GenericBox<T> {
    
    /*
     * 제너릭을 이용한 클래스 정의
     * 제너릭타입 T를 클래스 생성시 파라미터로 전달하여 형변환이 필요없다.
     */
    
    private T t;
    public T get() { return t; }
    public void set(T t) { this.t = t; }
}
cs




제너릭을 사용한 객체에 String 넣고 빼기


1
2
3
4
5
6
7
8
9
10
11
12
public class GenericBoxExample {
    public static void main(String[] args) {
        GenericBox<String> box1 = new GenericBox<String>();
        //제너릭을 이용한 객체 생성
        box1.set("수박");
        String fruit = box1.get();//제너릭으로 타입을 제한했기데 형변환이 필요없다.
        
        GenericBox<Integer> box2 = new GenericBox<Integer>();
        box2.set(5);
        int count = box2.get();
    }
}
cs


'Java' 카테고리의 다른 글

[제너릭]와일드카드 타입  (0) 2017.02.17
[제너릭]제너릭 메소드  (0) 2017.02.16
Thread 상속으로 thread 생성  (0) 2017.01.27
Runnable을 이용한 Thread 생성 방법들  (0) 2017.01.25
멀티 스레드 개념  (0) 2017.01.25

+ Recent posts