제너릭 (Generic) ?
일반적인 이란 뜻
List<Integer> list = new ArrayList<Integer>();
List<String> list = new ArrayList<String>();
위와 같이 ArrayList 클래스 인스턴스를 생성하는데, Integer, String 등 자료형을 유연하게 선택 가능
제너릭을 사용하지 않을 경우
public class ExampleClass {
private int exampleData;
public void setExampleMethod(int data){
this.exampleData = data;
}
public int get(){
return exampleData;
}
}
위의 ExampleClass 는 int 형의 데이터만 사용할 수 있다
내가 만약 String 형 데이터를 활용하는 ExampleClass 를 만들고 싶으면 새로운 클래스를 만들거나
String 타입 데이터를 받는 필드를 새로 추가하여 활용해야 하는데, 이는 유지/보수에 매우 좋지 않다
제너릭을 사용하지 않고 여러 타입을 받는 클래스
public class ExampleClass {
private Object exampleData;
public void setExampleMethod(Object data){
this.exampleData = data;
}
public Object get(){
return exampleData;
}
}
위와 같은 클래스는 여러 자료형을 활용 가능하지만, 활용 할 때마다 해당 타입에 맞는 타입 캐스팅이 필요
ExampleClass e = new ExampleClass();
e.setExampleMethod(10);
int m = (int)e.get();
위와 같이 int 형 데이터를 활용하려면, (int) 로 타입 캐스팅이 필요
제너릭 클래스 사용할 경우
public class ExampleClass<T>{
private T exampleData;
public void setExampleMethod(T data){
this.exampleData = data;
}
public T get(){
return exampleData;
}
}
위와 같이 T 같은 키워드를 통해 제너릭 타입 클래스로 선언
ExampleClass<Integer> e = new ExampleClass<Integer>();
e.setExampleMethod(10);
int m = e.get();
위와 같이 <>안에 타입을 지정하여 해당 타입만을 활용하는 인스턴스를 생성 가능
타입캐스팅 불필요
** 키워드 (규칙은 없지만, 일반적으로 사용되는 대문자 알파벳)
타입인자 | 설명 |
<T> | Type |
<E> | Element |
<K> | Key |
<N> | Number |
<V> | Value |
<R> | Result |
'끄적 > ?' 카테고리의 다른 글
HashMap Key에 Object (0) | 2023.09.17 |
---|---|
업캐스팅 다운캐스팅 (0) | 2023.08.27 |
Java ArrayList와 List 차이 (0) | 2023.08.27 |
String, StringBuffer, StringBuilder (0) | 2023.08.27 |
Java 메모리 구조, JVM 동작 방식 (0) | 2023.08.27 |