1. 제네릭 개요 및 기본 개념


제네릭이란?

제네릭(Generic)은 자바에서 다양한 데이터 타입을 지원하면서도 타입 안정성을 보장할 수 있게 하는 기능이다. 제네릭을 사용하면 클래스나 메서드에서 사용되는 데이터 타입을 고정하지 않고, 유연하게 받을 수 있다.

간단한 예로, 제네릭을 사용하지 않고 여러 타입을 처리하는 List를 만든다면 Object 타입을 사용해야한다.

List list = new ArrayList();
list.add("Hello");
list.add(123);  // String, Integer 모두 저장 가능

위 코드처럼 Object 타입으로 선언된 리스트는 다양한 타입을 담을 수 있지만, 타입 안전성이 보장되지 않아 꺼낼 때 타입 캐스팅을 해야 하고, 잘못된 타입으로 처리할 경우 런타임 에러가 발생할 수 있습니다.

제네릭의 필요성

제네릭을 사용한 코드 예시

List<String> stringList = new ArrayList<>();
stringList.add("Hello");
// stringList.add(123);  // 컴파일 에러: Integer는 String 타입이 아님

위와 같이 제네릭을 사용하면 List에 저장할 수 있는 타입을 String으로 제한할 수 있다.

stringListString 이외의 다른 타입을 추가하면 컴파일 에러가 발생하므로, 잘못된 타입의 데이터가 추가되는 것을 방지할 수 있음.

public class Pair<T, U> {
    private T first;
    private U second;

    public Pair(T first, U second) {
        this.first = first;
        this.second = second;
    }

    public T getFirst() {
        return first;
    }

    public U getSecond() {
        return second;
    }
}

// 사용 예시
Pair<String, Integer> pair1 = new Pair<>("Hello", 123);
Pair<Double, Double> pair2 = new Pair<>(10.5, 20.5);