📋 제네릭(Generic)

✅ 제네릭의 장점

✅ 제네릭 타입 매개변수

타입 매개변수 의미
<T> Type
<E> Element
<K> Key
<V> Value
<N> Number

✅ 제네릭 예제

📌 제네릭 클래스

package section16.ex01;

class ClassInt {
    private int element;

    void set(int element) {
        this.element = element;
    }

    int get() {
        return element;
    }
}

class ClassString {
    private String element;

    void set(String element) {
        this.element = element;
    }

    String get() {
        return element;
    }
}

class ClassDouble {
    private Double element;

    void set(Double element) {
        this.element = element;
    }

    Double get() {
        return element;
    }
}

// 제네릭 사용한 경우
class ClassGeneric<E> {
    private E element;

    void set(E element) {
        this.element = element;
    }

    E get() {
        return element;
    }
}

public class Ex1601 {
    public static void main(String[] args) {

        ClassInt classInt = new ClassInt();
        classInt.set(10);
        System.out.println("classInt\\t: " + classInt.get());

        ClassString classString = new ClassString();
        classString.set("java");
        System.out.println("classString\\t: " + classString.get());

        ClassDouble classDouble = new ClassDouble();
        classDouble.set(3.14);
        System.out.println("classDouble\\t: " + classDouble.get());

        System.out.println("---이하 제네릭 사용---");

        ClassGeneric<Integer> genericInteger = new ClassGeneric<>();
        genericInteger.set(10);
        System.out.println("genericInteger\\t: " + genericInteger.get());
        System.out.println("Type\\t\\t: " + genericInteger.get().getClass().getName()); // 타입 출력

        System.out.println();

        ClassGeneric<String> genericString = new ClassGeneric<>();
        genericString.set("java");
        System.out.println("genericString\\t: " + genericString.get());
        System.out.println("Type\\t\\t: " + genericString.get().getClass().getName());

        System.out.println();

        ClassGeneric<Double> genericDouble = new ClassGeneric<>();
        genericDouble.set(3.14);
        System.out.println("genericDouble\\t: " + genericDouble.get());
        System.out.println("Type\\t\\t: " + genericDouble.get().getClass().getName());

    }
}

📌 제네릭 메서드

package section16.ex01;

public class Ex1602 {

    // 제네릭 메서드를 정의할 때 타입 파라미터 사용
    public static <T> void printArray(T[] array) {
        for (T element : array) {
            System.out.print(element + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        // 정수 배열 출력
        Integer[] intArray = {1, 2, 3, 4, 5};
        printArray(intArray);

        // 문자열 배열 출력
        String[] stringArray = {"A", "B", "C", "D", "E"};
        printArray(stringArray);
    }
}