[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;
}
}
위와 같이 여러개의 타입 파라미터를 사용할 수도 있다.
댓글
댓글 쓰기