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