자바에서 제네릭스를 사용할 때, 특정 타입으로 제한된 클래스를 정의할 수 있습니다. 이는 특정 타입의 하위 타입(subtype)만을 허용하도록 하는 제한(바운드)을 의미합니다. 제한된 제네릭 클래스는 다음과 같이 정의할 수 있습니다.
// T는 Comparable 인터페이스를 구현한 클래스만을 허용하는 제네릭 클래스
class ComparableBox<T extends Comparable<T>> {
private T value;
public ComparableBox(T value) {
this.value = value;
}
public T getValue() {
return value;
}
public boolean isGreaterThan(ComparableBox<T> otherBox) {
return value.compareTo(otherBox.getValue()) > 0;
}
}
public class GenericBoundsExample {
public static void main(String[] args) {
ComparableBox<Integer> box1 = new ComparableBox<>(42);
ComparableBox<Integer> box2 = new ComparableBox<>(15);
if (box1.isGreaterThan(box2)) {
System.out.println("box1 is greater than box2");
} else {
System.out.println("box1 is not greater than box2");
}
// 아래 줄의 주석을 해제하면 컴파일 오류가 발생합니다.
// ComparableBox<String> stringBox = new ComparableBox<>("Hello");
}
}
위의 예제에서 ComparableBox 클래스는 T라는 타입 파라미터를 가지고 있습니다. 그리고 이 T는 Comparable<T> 인터페이스를 구현한 클래스여야 합니다. 이렇게 하면 ComparableBox를 사용할 때 T에는 Comparable 인터페이스를 구현한 타입만을 사용할 수 있습니다.
주의할 점은 여기서 사용한 T extends Comparable<T>는 상한 바운드(upper bound)로, T가 Comparable<T>의 하위 타입이어야 한다는 것을 의미합니다. 이를 통해 compareTo 메서드 등을 사용할 수 있게 됩니다.
위 예제에서 ComparableBox<Integer>는 제대로 동작하며 isGreaterThan 메서드를 통해 두 상자의 크기 비교를 할 수 있습니다. 그러나 주석 처리된 부분에서 ComparableBox<String>를 만들려고 하면 컴파일 오류가 발생합니다. 이는 String이 Comparable<String>을 구현하지 않기 때문입니다.
With ChatGPT
'JAVA > 포스팅' 카테고리의 다른 글
자바 제네릭 메서드 (0) | 2023.11.19 |
---|---|
자바 제네릭스 와일드 카드 (0) | 2023.11.19 |
자바 제네릭 클래스의 객체 생성과 사용 (0) | 2023.11.19 |
자바 제네릭 클래스의 선언 (0) | 2023.11.19 |
자바 제네릭스(Generics) (0) | 2023.11.19 |