제너릭 (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

+ Recent posts