Box<T> 지네릭 클래스, T의 Box 또는, T Box라고 읽는다.
T 타입변수, 또는 타입 매개변수(T는 타입문자)
Box 원시타입
지네릭 클래스를 생성할 떄는 다음과 같이 진행해야한다. 참조변수와 생성자에 대입된 타입(매개 변수화된 타입)이 일치해야 한다. 일치하지 않으면 에러가 발생한다.
Box<Apple> appleBox = new Box<Apple>(); -- OK
Box<Apple> appleBox = new Box<Grape>(); -- Failed
두타입이 상속 관계에 있더래도 마찬가지이다. Apple이 Fruit의 자손이라고 생각하자
Box<Fruit> appleBox = new Box<Apple>(); -- Fail.. 타입이 다르다.
단, 두 지네릭 클래스의 타입이 상속관계에 있고, 대입된 타입이 같은것은 괜찮다
FruitBox가 Box의 자손이라고 가정하자
Box<Apple> appleBox = new FruitBox<Apple>(); -- Ok, 다형성에 의해서 가능
Box<T> 의 void add(T item) 메서드의 경우를 생각해보자
Box<Apple> appleBox = new Box<Apple>();
appleBox.add(new Apple()); -- OK
appleBox.add(new Grape()); -- Fail... Box<Apple> 에는 Apple 객체만 추가 가능
만약에 타입 T가 Fruit인 경우는
Box<Fruit> fruitBox = new Box<Fruit>();
fruitBox.add(new Fruit()); -- Ok
fruitBox.add(new Apple()); -- Ok ,,, 다형성에 의해 가능
Fruit f = new Apple(); // Fruit f = new Grape(); 가능하듯이.
제한된 지네릭 클래스.
< ? extends T > 와일드 카드의 상한 제한 T와 그 자손들만 가능
< ? super T > 와일드 카드의 하한 제한 T와 그 조상들만 가능
<?> 제한 없음 모든 타입이 가능, <? extends Object> 와 동일하다.
public static < T extends Comparable<? super T>> void sort(List<T> list)
--> 매개변수로 지정한 List<T>를 정렬하는 매서드
이해하기 위해서는 와이드 카드를 우선 제거한다음 다시보자
public static < T extends Comparable<T>> void sort(List<T> list)
List<T>의 요소가 Comparable인터페이스를 구현한 것이어야 한다는 의미이다.
즉 T는 Comparable을 구현한 클래스이어야 하며, (T extends Comparable),
'T'또는 그 조상의 타입을 비교하는 Comparable이어야 한다는 것 즉 T는 하한 제한이 걸려있으며 T는 Comparable을 구현하거나 그 조상들이어야 한다.
즉 T가 Student이고, Person의 자손이라면 , <? super T> 는 Student, Person, Object 모두 가능하다,
'dev > JAVA' 카테고리의 다른 글
[JAVA] StandardMultipartHttpServletRequest (0) | 2023.03.11 |
---|---|
[JAVA] 익명 클래스 (0) | 2022.05.31 |
[JAVA] 인터페이스의 장점 (0) | 2022.05.31 |
[JAVA] 인터페이스의 다형성 (0) | 2022.05.31 |
[JAVA] 인터페이스 (0) | 2022.05.31 |