[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;
}
}

위와 같이 여러개의 타입 파라미터를 사용할 수도 있다.





댓글