-
제한된 지네릭 클래스, 지네릭스의 제약공부/Java 2024. 4. 24. 19:54
제한된 지네릭 클래스, 지네릭스의 제약
지네릭 클래스 제한하기
- extends로 대입할 수 있는 타입을 제한
예제
class FruitBox<T extends Fruit> { ArrayList<T> list = new ArrayList<T>(); ... }
Fruit의 자손만 타입으로 지정 가능하도록 상속관계를 걸어준다.
이렇게 하면 내가 원하는 종류만 타입 변수로 대입할 수 있게 된다.
- 인터페이스인 경우에도 extends를 사용한다.
Fruit 클래스와 Eatable 인터페이스를 함께 상속받는다고 가정해보자.
예제
class FruitBox<T extends Fruit & Eatable> extends Box<T>{}
※ 인터페이스를 상속받을 땐 ','(콤마)가 아닌 '&'(앤드)를 사용한다.
지네릭스의 제약
- 타입 변수에 대입은 인스턴스 별로 다르게 가능하다.
- static 멤버에는 타입 변수 사용이 불가능하다.
※ 모든 인스턴스에 공통으로 사용되기 때문이다.
- 배열(객체) 생성할 때 타입 변수 사용은 불가능하고, 타입 변수로 배열 선언은 가능하다.
예제
class Box<T> { T[] itemArr; // 가능. T타입의 배열을 위한 참조변수 ... T[] toArray() { // T[] tmarr = new T[itemAarr.length]; //에러. 지네릭 배열 생성 불가 ... } }
T를 사용해 배열 선언은 가능하나, new 연산자를 통해 객체를 생성하거나, 배열을 생성할 수는 없다.
new 연산자는 뒤에 타입이 확정되어야 하나, T는 확정 지어지지 않은 상태기 때문에 사용할 수 없다.
'공부 > Java' 카테고리의 다른 글
지네릭 메서드 (0) 2024.04.25 와일드 카드 (0) 2024.04.25 HashMap과 지네릭스 (0) 2024.04.23 Iterator<E> (0) 2024.04.22 지네릭스 용어, 지네릭 타입과 다형성 (0) 2024.04.20