Java/문법

Generic - 매개변수 타입을 미리 지정하지 않는 유연한 문법

JuNo_12 2025. 4. 17. 21:22

Generic 이란?

  • 제네릭은 클래스, 메서드 등에 사용되는 <T>타입 매개변수를 의미
  • 타입을 미리 지정하지 않고 사용 시점에 유연하게 결정할 수 있는 문법
  • 코드 재사용성(다양한 타입에서 동일한 코드로 코드 재사용 가능)
  • 타입 안정성(잘못된 타입 사용을 컴파일 시점에 방지)
  • 하지만 과도하게 사용하면 오히려 복잡해질 수 있으므로 주의!

 

 

Generic 활용 예시

public class GenericBox<T> { // 제네릭 메서드

    // 속성
    private T item;

    // 생성자
    public GenericBox(T item) {
        this.item = item;
    }

    // 기능
    public T getItem() {
        return this.item;
    }

	// 일반 메서드 T item 는 클래스의 <T> 를 따라간다.
    public void printItem(T item) {
        System.out.println(item);
    }
    
    // 제네릭 메서드 <S> 는 <T> 와 별개로 독립적이다.
    public <S> void printBoxItem(S item) { 
        System.out.println(item);
    }
}



public class Main {

    public static void main(String[] args) {
        GenericBox<String> strGBox = new GenericBox<>("ABC");
        GenericBox<Integer> intGBox = new GenericBox<>(100);
        
        // 일반메서드: 클래스 타입 매개변수를 따라간다.
        // String 데이터 타입 기반으로 타입소거가 발생.
        // String 타입의 다운캐스팅 코드 삽입!
        strGBox.printItem("ABC"); // String 만 사용가능
        strGBox.printItem(100);   // 에러 발생 
        
        // 제네릭 메서드: 독립적인 타입 매개변수를 가집니다.
        // String 타입 정보가 제네릭 메서드에 아무런 영향을 주지 못함.
        // 다운캐스팅 코드 삽입되지 않음.
        strGBox.printBoxItem("ABC"); //모든 데이터 타입 활용 가능
        strGBox.printBoxItem(100);   
        strGBox.printBoxItem(0.1);   
    }
}