📋 제네릭(Generic)
✅ 제네릭의 장점
- 코드 재사용성(Code Reusability) 높임(타입 매개변수 사용)
- 타입 안정성(Type Safety) 보장(컴파일 시점에서 타입을 체크하여, 런타임 오류 줄임)
- 관리의 편리성(클래스 외부에서 타입 지정, 별도의 타입 체크 및 변환 불필요)
✅ 제네릭 타입 매개변수
타입 매개변수 |
의미 |
<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);
}
}