제네릭 : 컴파일 타임에 타입을 체크함으로써 코드의 안전성을 높여주는 기능
- 컴파일 타임에 강력한 타입 검사
- 캐스팅(타입 변환) 제거
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 생성
'공부 기록 > 영상 후기' 카테고리의 다른 글
[10분 테코톡] 범고래, 소주캉의 JDBC, SQL Mapper, ORM (0) | 2023.05.06 |
---|---|
[10분 테코톡] 클레이의 상속과 조합 (0) | 2023.05.06 |
[10분 테코톡] 우기의 MySQL 아키텍처 (0) | 2023.05.05 |
[10분 테코톡] 수리의 TCP/IP (0) | 2023.05.05 |
[10분 테코톡] 알파의 인터페이스 (0) | 2023.05.05 |