본문 바로가기

공부 기록/영상 후기

[10분 테코톡] 그린론의 제네릭

https://youtu.be/w5AKXDBW1gQ

제네릭 : 컴파일 타임에 타입을 체크함으로써 코드의 안전성을 높여주는 기능

- 컴파일 타임에 강력한 타입 검사

- 캐스팅(타입 변환) 제거

  

Object[] list = new Integer[10]; => 가능 => 공변

List<Object> list = new ArrayList<Integer>(); => 불가능 => 무공변

  

변성(Variance)

- 무공변(Invariance) : <T>, 타입 B가 타입 A의 하위 타입일 때, Category<B>가 Category<A>의 하위 타입이 아닌 경우, 즉, 아무런 관계가 없는 경우

- 공변(Covariance) : <? extends T>, 타입 B가 타입 A의 하위 타입일 때, Category<B>가 Category<A>의 하위 타입인 경우

- 반공변(Contravariance) : <? super T>, 타입 B가 타입 A의 하위 타입일 때, Category<B>가 Category<A>의 상위 타입인 경우

  

와일드 카드

- <?> : Unbounded Wildcards, 모든 타입이 가능

- <? extends Member> : Upper Bounded Wildcards, Member와 Member의 하위 타입. 상한 제한

- <? super Member> : Lower Bounded Wildcards, Member와 Member의 상위 타입. 하한 제한

- PECS : producer - extends, consumer - super => 생성하는 곳에서는 extends를 사용하고, 소비하는 곳에서는 super를 사용하라.

  

제네릭 타입 소거

- 타입 매개변수의 경계가 없는 경우에는 Object로, 경계가 있는 경우에는 경계 타입으로 타입 파라미터를 변경

- 타입 안정성을 유지하기 위해, 필요한 경우 타입 변환 추가

- 제네릭 타입을 상속받은 클래스의 다형성을 유지하기 위해 Bridge method 생성