[Java] Generic: 와일드카드

언어에서 와일드카드는 모든 것에 매칭될 수 있는 표현을 말한다. 이것도 비슷하다.

제너릭의 타입 매개변수로 ?를 전달하면, 뭐든 들어갈 수 있다는 뜻이 된다. image

image

image 놀랍게도, 하나의 <?> 버전으로 이 다 동작한다.
근데 이거 혼자서는 잘 안쓰인다.
보통 제약을 건 상태로 매개변수에 사용된다.


하위타입 제약
? extends A로 제약을 걸면, A와 A의 서브타입만 들어갈 수 있다.

만약 이렇게 Top->Middle->Bottom 구조의 클래스들이 있고 image

image Middle로 제약을 걸면, Middle과 그 서브타입 Bottom만 들어갈 수 있는 것이다.

Top를 사용한다면 에러가 난다. image

image


상위타입 제약
하지만, 반대로 상위타입에 대한 제약이 필요할 수도 있다. 그럴땐 extends 대신 super를 사용한다.
Middle이 super로 걸려있다면, 들어갈 수 있는건 Middle과 그 상위타입 Top 뿐이다. image

image Bottom은 이렇게 에러가 난다.

그냥 Middle과 Top은 image

image 잘 컴파일된다.