[JAVA] 제네릭(Generic)
JAVA 제네릭(Generic)
제네릭은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다.
제네릭을 사용하는 이유는 타입이 안전하다는 장점과 코드의 중복을 제거한다는 이유에서 사용한다.
제네릭(Generic) 장점
1. 잘못된 타입이 들어올 수 있는 문제를 컴파일 단계에서 방지할 수 있다.
2. 코드의 재사용성이 높아진다.
제네릭(Generic)에서 사용되는 타입인자
타입인자  | 설명  | 
<T>  | Type  | 
<E>  | Element  | 
<K>  | Key  | 
<N>  | Number  | 
<V>  | Value  | 
<R>  | Result  | 
제네릭(Generic) 사용방법
<> 사이에다가 참조형 데이터타입을 작성해준다. 기본형 데이터타입은 작성이 불가하다. (int, char..)
하지만 이러한 기본형 데이터타입도 사용이 가능하게하는 방법이 있다. 그것은 wrapper클래스이다.
자바에서는 기본형 데이터타입을 객체처럼 사용할 수 있도록하는 객체들을 제공하는데 바로 그러한 것을 wrapper 클래스이다. 
int의 wrapper 클래스는 Integer, double의 wrapper 클래스는 Double , char는 Character 등이있다.
제네릭 클래스
class ExClassGeneric<T> {
    private T t;
    public void setT(T t) {
        this.t = t;
    }
    public T getT() {
        return t;
    }
}
클래스를 설계할 때 구체적인 타입을 명시하지 않고 타입 파라미터로 작성해두었다가 해당 클래스가 사용되어질 때 ExClassGeneric<String> exGeneric = new ExClassGeneric<>(); 이런식으로 타입을 지정해 줄 수 있다.
제네릭 인터페이스
interface ExInterfaceGeneric<T> {
    T example();
}
class ExGeneric implements ExInterfaceGeneric<String> {
    @Override
    public String example() {
        return null;
    }
}
인터페이스도 클래스 처럼 제네릭으로 설정해두고 사용할 수 있다.
멀티 타입 파라미터
class ExMultiTypeGeneric<K, V> implements Map.Entry<K,V>{
    private K key;
    private V value;
    @Override
    public K getKey() {
        return this.key;
    }
    @Override
    public V getValue() {
        return this.value;
    }
    @Override
    public V setValue(V value) {
        this.value = value;
        return value;
    }
}
위와 같이 여러개의 타입 파라미터를 사용할 수도 있다.
댓글
댓글 쓰기