제네릭 타입(Generics)은 자바에서 타입을 일반화하여 코드의 재사용성을 높이고, 컴파일 시 타입 안전성을 확보하기 위해 사용하는 기능입니다. 이를 통해 클래스나 메서드에서 사용할 데이터 타입을 미리 지정하지 않고, 사용 시점에 특정 타입으로 지정할 수 있습니다.

제네릭의 특징

  1. 타입 안전성: 제네릭을 사용하면 컴파일 시 타입 체크를 할 수 있어, 잘못된 타입을 사용하는 오류를 사전에 방지할 수 있습니다. 예를 들어, List<String> 타입의 리스트에는 문자열만 추가할 수 있습니다.
  2. 코드 재사용성: 제네릭을 사용하여 다양한 타입의 데이터를 처리할 수 있는 클래스나 메서드를 작성할 수 있습니다. 이를 통해 같은 코드에서 여러 데이터 타입을 사용할 수 있습니다.
  3. 타입 파라미터: 제네릭은 클래스, 인터페이스, 메서드에 타입 파라미터를 사용하여 특정 타입을 미리 정의할 수 있습니다. 보통 <T> 형태로 사용합니다.

제네릭 사용 예시

제네릭 클래스

java
코드 복사
public class Box<T> {
    private T item;

    public void setItem(T item) {
        this.item = item;
    }

    public T getItem() {
        return item;
    }
}

위의 Box 클래스는 제네릭 타입 T를 사용하여 다양한 타입의 객체를 저장할 수 있는 클래스입니다. setItem 메서드와 getItem 메서드는 모두 T 타입을 사용하여, 저장된 객체의 타입에 맞춰 동작합니다.

제네릭 메서드

java
코드 복사
public class Util {
    public static <T> void printArray(T[] array) {
        for (T item : array) {
            System.out.println(item);
        }
    }
}

위의 printArray 메서드는 제네릭 메서드로, 어떤 타입의 배열이든 받을 수 있습니다. 배열의 타입에 따라 T가 자동으로 결정됩니다.

제네릭 인터페이스

java
코드 복사
public interface Pair<K, V> {
    public K getKey();
    public V getValue();
}

위의 Pair 인터페이스는 키와 값을 저장하는데 사용되며, 두 개의 타입 파라미터 KV를 사용합니다. 이를 통해 다양한 타입의 키와 값을 가질 수 있는 쌍을 생성할 수 있습니다.

제네릭 사용의 장점

제네릭을 적절히 사용하면 자바 코드의 품질과 유지보수성을 크게 향상시킬 수 있습니다.