[Effective Java] 한정적 와일드카드를 사용해 API 유연성을 높이라


[Effective Java] 한정적 와일드카드를 사용해 API 유연성을 높이라

불공변 서로 다른 타입 Type1과 Type2가 있을 때 List<Type1>은 List<Type2>의 하위 타입도 상위 타입도 아니다. 예를 들면 List<String>은 List<Object>의 하위 타입이 아니다는 뜻 List<Object>에는 어떤 객체든 넣을 수 있지만 List<String>에는 문자열만 넣을 수 있다. 즉, List<String>은 List<Object>가 하는 일을 제대로 수행하지 못하니 하위 타입이 될 수 없다. 불공변 방식보다 유연한 무언가 와일드카드 타입을 사용하지 않는 pushAll 메서드에는 결함이 있다. src의 원소 타입과 스택의 원소 타입이 일치하면 잘 동작한다. 하지만 Stack<Number>로 선언하고 Iterable<Integer>를 넣으면 Integer가 Number의 하위 타입이니 잘 동작할 것 같지만 실제로는 매개변수화 타입이 불공변이기에 오류 메시지가 뜬다. 해결법 한정적 와일드카드 타입이라는 특별한 매개변수화 타입 지원함 pu...


#EffectiveJava #java #불공변 #와일드카드 #이펙티브자바 #제네릭

원문링크 : [Effective Java] 한정적 와일드카드를 사용해 API 유연성을 높이라