minstudio

제네릭 (Generics)

자바 배열이나 리스트에 다양한 타입의 데이터를 마구잡이로 넣다 보면, 나중에 꺼내 쓸 때 어떤 타입인지 몰라 에러가 발생하기 쉽습니다. 이를 방지하기 위해 제네릭(Generics) <T>을 사용합니다.

제네릭은 클래스나 메서드를 정의할 때 타입을 미리 정하지 않고, 실제 사용할 때(객체를 생성할 때) 타입을 지정하는 기법입니다. 이 덕분에 컴파일 시점에 강력한 타입 체크가 가능해지며, 꺼낼 때마다 형변환(Casting)을 해야 하는 번거로움이 사라집니다.

// 타입을 <T>라는 임시 변수로 뚫어놓은 제네릭 클래스 설계
class Box<T> {
    private T item; // T는 생성 시점에 String, Integer 등으로 치환됩니다.

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

    public T getItem() {
        return item;
    }
}

public class Main {
    public static void main(String[] args) {
        // 1. 객체를 생성할 때 <T> 자리에 들어갈 구체적 타입을 명시합니다. (타입 파라미터)
        Box<String> stringBox = new Box<>(); // Java 7 이상부터 뒤쪽 다이아몬드 연산자<> 생략 가능
        
        stringBox.setItem("소중한 반지");
        // stringBox.setItem(100); // 에러 발생! String만 넣을 수 있도록 컴파일러가 완벽 차단.

        // 캐스팅(형변환) 없이 바로 String으로 꺼내 쓸 수 있습니다.
        String myItem = stringBox.getItem();
        System.out.println("상자 안의 물건: " + myItem);


        // 2. 다른 타입으로도 재사용 가능!
        Box<Integer> numberBox = new Box<>(); // 원시타입 int는 안되고 Wrapper 클래스인 Integer 사용
        numberBox.setItem(999);
        System.out.println("상자 안의 숫자: " + numberBox.getItem());
    }
}
제네릭 (Generics) | Minstudio