Java/자바 정리
124. 숫자만 비교하자! – 제한된 제네릭(T extends Number)
코딩하는냥이
2025. 5. 15. 11:59
반응형
이번 글에서는 제네릭 타입 매개변수에 제한을 두는 방법을 배웁니다.
<T extends Number>처럼 extends 키워드를 사용하면,
해당 제네릭 메서드는 Number를 상속한 타입(예: Integer, Double, Float)만 사용할 수 있게 제한됩니다.
📌 예제 코드
public class GenericExample {
// Number를 상속한 타입만 허용하는 제네릭 메서드
public static <T extends Number> boolean compare(T t1, T t2) {
System.out.println("compare(" + t1.getClass().getSimpleName() + ", " + t2.getClass().getSimpleName() + ")");
double v1 = t1.doubleValue();
double v2 = t2.doubleValue();
return (v1 == v2); // double 값으로 비교
}
public static void main(String[] args) {
boolean re = compare(10, 20); // Integer 비교
System.out.println(re + "\n");
re = compare(4.5, 4.5); // Double 비교
System.out.println(re);
}
}
💻 실행 결과
compare(Integer, Integer)
false
compare(Double, Double)
true
💬 코드 설명
- <T extends Number>는 이 메서드가 Number 또는 그 자식 타입만 인자로 받을 수 있도록 제한합니다.
- t1.doubleValue()는 Number 클래스에 정의된 메서드로, int, float, double 값을 double형으로 변환해줍니다.
- compare(10, 20)은 10.0 == 20.0 비교 → false
- compare(4.5, 4.5)는 4.5 == 4.5 → true
- t1.getClass().getSimpleName()은 콘솔에 전달된 타입 이름을 출력하기 위해 사용되었습니다.
💡 포인트 정리
- T extends Number는 해당 제네릭이 Number의 자식만 받도록 제한합니다.
- 이 방식은 특정 기능(예: 숫자 연산)을 보장하고 싶은 경우 유용합니다.
- 대표적인 Number 하위 클래스: Integer, Double, Float, Long, Short, Byte
- 타입 제한을 통해 불필요한 타입 사용을 컴파일 단계에서 차단할 수 있습니다.
📌 정리하자면, <T extends Number>처럼 타입을 제한하면,
숫자 타입에만 특화된 기능을 안전하게 제공할 수 있어 코드 신뢰성과 가독성이 높아집니다.
이는 제네릭의 강력한 확장성과 타입 안전성을 동시에 활용하는 대표적인 예입니다.