Generics

SeungJoo
|2023. 10. 22. 20:27
728x90

Generics

프로그래밍 언어에서 여러 데이터 타입에 대해 일반화된 알고리즘, 클래스, 인터페이스를 작성할 수 있도록 해주는 프로그래밍 기법입니다. 제네릭스를 사용하면 코드의 재사용성을 높이고 타입 안전성을 제공하며, 불필요한 형변환을 줄일 수 있습니다. 또한 다양한 타입의 객체를 지원하는 클래스나 인터페이스 또는 메서드를 정의하며 똑같은 동작을 하는 클래스나 메서드를 여러 번 만들 필요 없이 한 번만 정의하고 나서 여러 타입에 대해 지원할 수 있도록 해주는 역할입니다.

 

[이미지 출처]  11. 제네릭스 : Generics (tistory.com)

public class Generics {
    public static void main(String[] args) {
        Int[] iArray = {1,2,3,4,5};  // 기본 자료형  ) (int double, float, boolean..등은 제네릭 바로 사용 xx)
        double[] dArray = {1.0, 2.0, 3.0, 4.0, 5.0}; // 기본 자료형
        String[] sArray = {"A", "B", "C", "D", "E"}; // 참조 자료형

        printIntArray(iArray);
        printDoubleArray(dArray);
        printStringArray(sArray);
   }
        private static void printStringArray(String[] sArray) {
        for (String s : sArray) {
            System.out.print(s+ " "); //1,2,3,4,5
        }
        System.out.println();
    }

    private static void printDoubleArray(Double[] dArray) {
        for (double d : dArray) {
            System.out.print(d+ " "); //1,2,3,4,5
        }
        System.out.println();
    }


    public static void printIntArray(Integer[] iArray) {
        for (int i : iArray) {
            System.out.print(i+ " "); //1,2,3,4,5
        }
        System.out.println();
    }
}

위 결과와 제네릭을 이용한 아래 내용과 결과는 똑같습니다.

public class _01_Generics {
    public static void main(String[] args) {
        Integer[] iArray = {1,2,3,4,5};  // 기본 자료형  ) (int double, float, boolean..등은 제네릭 바로 사용 xx)
        Double[] dArray = {1.0, 2.0, 3.0, 4.0, 5.0}; // 기본 자료형
        String[] sArray = {"A", "B", "C", "D", "E"}; // 참조 자료형

        printAnyArray(iArray);
        printAnyArray(dArray);
        printAnyArray(sArray);

   }
    private static <T> void printAnyArray(T[] array) {
        for (T t: array) {
            System.out.print(t + " "); //1,2,3,4,5
        }
        System.out.println();
    }
  }

Generics에서 지원하는 것은 객체이며 Wrapper Class를 이용해 주어야 합니다. 첫 번째 코드처럼 int, double이 아니라 int는 Integer, double는 Double, float은 Float로 변환시켜주어야 합니다.

제네릭 메서드 만드는 법

static과 void변환형 사이에 <T> 를 적고 전달값을 받는 부분도 (T)를 적어주면 됩니다.

 private static <T> void printAnyArray(T[] array) {
        for (T t: array) {
            System.out.print(t + " "); //1,2,3,4,5
        }
        System.out.println();
    }

ex) 보편적으로는 Type = T , Key = K , Value = V, Element = E로 표현합니다.

728x90

'JAVA' 카테고리의 다른 글

HashSet, HashMap  (0) 2023.10.23
Super  (0) 2023.10.21
인터페이스와 추상 클래스  (1) 2023.10.20