와일드 카드
-하나의 참조 변수로 대입된 타입이 다른 객체를 참조 가능
<? extends T> 와일드 카드의 상한 제한. T와 그 자손들만 가능
<? super T> 와일드 카드의 하한 제한. T와 그 조상들만 가능
<?> 제한 없음. 모든 타입이 가능<? extends Object>와 동일
-메서드의 매개변수에 와일드 카드를 사용
+++
와일드카드는 읽기 전용이다

와일드카드를 사용하면, 해당 변수가 다양한 타입을 참조할 수 있지만, 새로운 객체를 추가하는 것은 허용되지 않는다.
이게 중요한 차이점인데, 와일드카드는 타입을 유연하게 참조할 수 있게 해주는 반면, 그 안에 무언가를 추가하거나 변경하는 작업에 대해서는 불확실성을 발생시킬 수 있기 때문에 금지된다.
(* 타입 안정성을 보장하기 위해서 쓰기를 제한함.
자바 컴파일러는 FruitBox2<? extends Fruit2>에 어떤 구체적인 타입이 들어갈지 확실하게 알지 못함.)
제네릭 메서드
- 제네릭 타입이 선언된 메서드(타입 변수는 메서드 내에서만 유효)
- 클래스의 타입 매개변수 <T>와 메서드의 타입 매개변수 <T>는 별개
- 메서드를 호출할 때마다 타입을 대입해야함(대부분 생략 가능)
- 메서드를 호출할 때 타입을 생략하지 않을 때는 클래스 이름 생략 불가
제네릭 타입의 형변환
- 제네릭 타입과 원시 타입 간의 형변환은 바람직 하지 않다.(경고 발생)

- 와일드 카드가 사용된 제네릭 타입으로는 형변환 가능

제네릭타입의 제거
- 컴파일러는 제네릭 타입을 제거하고, 필요한 곳에 형변환을 넣는다'
1, 제네릭 타입의 경계(bound)를 제거
2. 제네릭 타입 제거 후에 타입이 불일치하면, 형변환을 추가
'Programming > 자바(Java)' 카테고리의 다른 글
| 12-23 애너테이션이란? (2) | 2024.10.17 |
|---|---|
| 12-17 열거형 (0) | 2024.10.17 |
| 12-9 제한된 제네릭 클래스 / 제네릭스의 제약 (1) | 2024.10.17 |
| 12-8 HashMap<K,V> (0) | 2024.10.15 |
| 12-7 Iterator<E> (0) | 2024.10.15 |