Generics 3

Java 제네릭 실전 패턴: 제네릭 메서드·인터페이스 설계와 자주 만나는 에러 해결법

Java 17 기준으로 제네릭 메서드와 제네릭 인터페이스를 실무 관점에서 설계하는 패턴을 정리하고, 타입 추론 실패·캡처 에러 등 흔한 컴파일 에러 해결법을 예제로 설명합니다. 제네릭을 “컴파일 타임 안전장치”라고는 하는데, 막상 공용 유틸을 만들거나 인터페이스를 설계할 때는 타입 파라미터를 어디에 둬야 할지 헷갈리실 때가 많아요. 특히 incompatible types, capture of ?, cannot infer type arguments 같은 에러가 한 번 나오면, 고치기보다 우회하게 되는 경우도 흔합니다. 이번 글에서는 실무에서 바로 써먹는 제네릭 메서드/인터페이스 패턴과, 자주 만나는 에러의 정석적인 해결법을 정리해 봅니다.핵심 개념: “타입 파라미터를 어디에 두느냐”가 API 품질을 결정합..

JAVA 2026.02.21

Java 와일드카드 완전 정복 — <? extends T>, <? super T> 그리고 PECS 원칙

Java 제네릭 와일드카드의 핵심인 extends/super 차이와 PECS 원칙을 실무 예제로 한 번에 정리합니다. 제네릭을 쓰다 보면 List 자리에 List를 넣고 싶은데 컴파일 에러가 나서 당황하실 때가 있어요. 반대로 “읽기만 할 건데 왜 타입이 이렇게 까다롭지?” 같은 생각도 들고요. 이럴 때 문제를 풀어주는 도구가 바로 와일드카드(?)입니다.핵심 개념 — Java 와일드카드와 PECS 원칙이 중요한 이유와일드카드는 “정확한 타입을 지금은 모르지만, 어떤 범위인지는 안다”를 타입 시스템에 표현하는 문법입니다. 핵심은 두 가지예요.: T의 하위 타입 중 하나 (Upper bounded wildcard): T의 상위 타입 중 하나 (Lower bounded wildcard)여기서 중요한 포인트는 ..

JAVA 2026.02.20

Java 제네릭 기초 — 타입 안전성의 시작

Java 제네릭의 필요성, 기본 문법, 그리고 타입 소거(Type Erasure)가 의미하는 한계와 설계 포인트를 실무 관점에서 정리합니다. List에 뭔가를 담아두고 꺼냈는데, 런타임에 ClassCastException이 터진 경험 있으실 거예요. 혹은 “이 리스트엔 User만 들어간다”는 규칙을 팀원끼리 말로만 합의해 두고, 어느 날 누군가 다른 타입을 넣어 장애가 난 적도 있습니다. 제네릭은 이런 문제를 “컴파일 시점”으로 끌어와서, 실수를 빨리 발견하게 해주는 장치입니다.핵심 개념: Java 제네릭이 중요한 이유와 타입 소거(Type Erasure)제네릭이 필요한 이유: 타입 안정성과 의도의 문서화제네릭의 핵심 가치는 두 가지입니다.타입 안전성(Type Safety)제네릭이 없던 시절(또는 raw..

JAVA 2026.02.20