본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

<? extends *> 와일드카드, 보다 유연한 타입제한

와일드카드 <? extends *>

다양한 제네릭타입을 수용하다

제네릭타입의 일부분을 나타내는데 사용, 제한된 제네릭타입을 사용하는것과는 다르게 다양한 제네릭 타입을 수용한다.

https://standout.tistory.com/1395

 

제한된 제네릭 클래스 <T extends *>

제한된 제네릭 클래스 특정타입, 특정타입의 하위클래스만을 허용하는 제네릭 클래스 프로그래머가 원치않는 타입의 입력을 방지할 수 있고 이를통해 더욱 제한적이고 안전하게 사용할 수 있

standout.tistory.com

 

 

 

Animal이란 클래스를 상속받은 Dog와 Cat이 있다고 가정하자.

class Animal {
    public void eat() {
        System.out.println("Animal is eating");
    }
}

class Dog extends Animal {
    public void bark() {
        System.out.println("Dog is barking");
    }
}

class Cat extends Animal {
    public void meow() {
        System.out.println("Cat is meowing");
    }
}

 

 

 

이때 feedAll메서드는 List를 매개변수로 받으나

Animal클래스나 혹은 Animal클래스를 상속받은 하위 클래스로 제한해야한다. 

이때 쓰이는 것이 <? extends *> 와일드카드

public class WildcardExample {
    public static void main(String[] args) {
        List<Animal> animals = new ArrayList<>();
        animals.add(new Dog());
        animals.add(new Cat());

        // animals의 모든 동물을 먹이주는 메서드 호출
        feedAll(animals);
    }

    public static void feedAll(List<? extends Animal> animals) {
        for (Animal animal : animals) {
            animal.eat();
        }
    }
}
Animal is eating
Animal is eating