제네릭과 와일드카드
7. 정리
- 제네릭은 타입을 파라미터로 받는 코드이며, 런타임
ClassCastException을 컴파일 에러로 앞당긴다. - JVM 은 제네릭을 모른다. 컴파일러가 검사 후 타입을 소거하고 캐스팅을 삽입한다 — 그래서
new T(),new T[],instanceof T,static T가 불가능하다. - 제네릭은 불공변이다.
List<Dog>는List<Animal>이 아니다. 배열의 공변성이 만든 런타임 오류를 반복하지 않기 위한 설계다. - 유연성이 필요하면 와일드카드: 읽으면
? extends, 쓰면? super— PECS. - 실무 제네릭 타입(
ApiResponse<T>,Result<T, E>,Repository<T, ID>)은record+sealed+ 패턴 매칭과 결합하면 가장 깔끔하다.
다음 레슨 02. 멀티스레드에서는 여러 스레드가 힙을 공유할 때 생기는 경쟁 조건과 그 해결책(synchronized, volatile, Atomic, ExecutorService, 가상 스레드)을 다룹니다.