자바에서 제너릭은 코드의 유연성과 타입 안전성을 향상시키는 중요한 기능이다. 제너릭을 사용하면 클래스, 인터페이스, 메소드를 다양한 타입의 객체들과 함께 사용할 수 있다. 이러한 특성은 코드 재사용성을 증가시키고, 컴파일 시간에 타입 체크를 통해 안정성을 높인다.
제너릭은 클래스나 메소드를 정의할 때 타입(Type)을 파라미터로 받을 수 있게 한다. 이를 통해 단 하나의 코드라인으로 다양한 타입의 객체들을 처리할 수 있는 유연성을 제공한다. 자바의 컬렉션 프레임워크에서 제너릭은 특히 유용하게 사용되며, "List", "Map", "Set"과 같은 인터페이스에서 제너릭을 통해 다양한 타입을 저장하고 처리할 수 있다.
class Box<T> {
private T t; // T stands for "Type"
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
public class Main {
public static void main(String[] args) {
Box<Integer> integerBox = new Box<>();
integerBox.set(10);
System.out.println("Integer Value: " + integerBox.get());
Box<String> stringBox = new Box<>();
stringBox.set("Hello World");
System.out.println("String Value: " + stringBox.get());
}
}
출력 결과
Integer Value: 10
String Value: Hello World
이 예제에서 Box 클래스는 타입 파라미터 T를 사용하여 정의된다. 이 클래스는 정수 또는 문자열 등 어떤 타입의 객체도 저장하고 반환할 수 있다.
public class Util {
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}
public static void main(String[] args) {
Integer[] intArray = {1, 2, 3, 4, 5};
String[] stringArray = {"Hello", "World", "Java", "Generic"};
System.out.println("Integer Array:");
printArray(intArray);
System.out.println("String Array:");
printArray(stringArray);
}
}
출력 결과
Integer Array:
1
2
3
4
5
String Array:
Hello
World
Java
Generic
이 예제에서 printArray 메소드는 제너릭 타입 T를 사용하여 어떤 배열의 요소든 출력할 수 있다. 이는 메소드 하나로 다양한 타입의 배열을 처리할 수 있음을 보여준다.
자바의 제너릭 기능은 프로그램의 안정성을 높이고 코드의 재사용성을 향상시키는 데 도움을 준다. 제너릭을 통해 개발자는 보다 타입 안정하고 유지보수가 용이한 코드를 작성할 수 있다.