JAVA

Generic(제네릭)

yebin0322 2025. 1. 22. 15:18
반응형

Generic(제네릭)

  • 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법
  • 타입을 일반화하는 것
  • 외부에서 지정 : 사용자가 제네릭 클래스의 인스턴스를 생성할 때나 제네릭 메소드를 호출할 때 타입을 정하는 것

제네릭 타입 매개변수(< >)

  • 타입을 일반화하여 사용할 수 있도록 해 주는 것
  • 일반적으로 클래스, 인터페이스 또는 메소드에서 타입을 매개변수로 받을 때 사용

역할

  1. 타입 안전성 : 컴파일 타입에 타입 검사를 수행하여 잘못된 타입의 객체가 사용되는 것을 방지하고 런타임에서 발생할 수 있는 ClassCastException을 줄여줌
  2. 코드 재사용성 : 여러 타입에 대해 동일한 코드를 재사용
  3. 명시적 타입 : <> 안에 타입을 명시함으로써, 해당 클래스나 인터페이스가 어떤 타입의 객체를 처리할 것인지 명확하게 지정할 수 있음
package day3;

public class GenericExample {

    public static <T extends Comparable<T>> T findMax(T[] array) {
        //T : 메소드 호출 시 실제 타입으로 대체
        //<T extends Comparable<T>> : T는 Comparable 인터페이스를 구현한 타입이어야 함 -> T 타입의 객체끼리 비교할 수 있음을 보장
        //comparable을 상속받았기 때문에 아래에서 compareTo 사용 가능

        T max = array[0]; // 첫 번째 요소로 초기화
        for (T element : array) {
            if (element.compareTo(max) > 0) {
                max = element; // 더 큰 값으로 업데이트
            }
        }
        return max;
    }

    public static void main(String[] args) {
        // Integer 배열
        Integer[] intArray = { 1, 3, 7, 2, 5 };
        Integer maxInt = findMax(intArray); //매개변수로 배열
        System.out.println("최대 Integer 값 : " + maxInt);

        // String 배열
        String[] strArray = { "apple", "orange", "banana", "kiwi" };
        String maxStr = findMax(strArray);
        System.out.println("최대 String 값 : " + maxStr);
    }

}
최대 Integer 값 : 7
최대 String 값 : orange
반응형