반응형
이번 글에서는 제네릭 타입 매개변수에 제한을 두는 방법을 배웁니다.
<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>처럼 타입을 제한하면,
숫자 타입에만 특화된 기능을 안전하게 제공할 수 있어 코드 신뢰성과 가독성이 높아집니다.
이는 제네릭의 강력한 확장성과 타입 안전성을 동시에 활용하는 대표적인 예입니다.
'프로그래밍 > JAVA' 카테고리의 다른 글
127. 동시에 소리와 출력 실행하기 – Thread로 병렬 처리 (0) | 2025.05.15 |
---|---|
126. 소리와 글자를 번갈아 출력해보자 – Toolkit.beep()와 Thread.sleep() (0) | 2025.05.15 |
125. 수강 조건 제한하기 – 와일드카드 ?, extends, super 실습 (0) | 2025.05.15 |
123. 메서드에도 제네릭을? – 제네릭 메서드 Boxing() (0) | 2025.05.15 |
122. 제네릭 객체도 비교할 수 있다 – 같은 타입끼리의 compare() 메서드 (0) | 2025.05.15 |
121. 인터페이스도 제네릭으로! – 타입별로 유연한 구조 만들기 (0) | 2025.05.15 |