30. 이왕이면 제네릭 메서드로 만들라
📝 아이템 30: 이왕이면 제네릭 메서드로 만들라
🔹 핵심 요약
🔹 주의 사항
🔹 제네릭 메서드의 필요성: 코드 진화 과정
flowchart TD
classDef stage1 fill:#FFEBCC,stroke:#333,stroke-width:1px
classDef stage2 fill:#E3F2FD,stroke:#333,stroke-width:1px
classDef stage3 fill:#DFF0D8,stroke:#333,stroke-width:1px
classDef issue fill:#FFCDD2,stroke:#D32F2F,stroke-width:1px
classDef benefit fill:#C8E6C9,stroke:#388E3C,stroke-width:1px
classDef customNode fill:#FFEFC8,stroke:#333,stroke-width:1px
subgraph 단계1["1단계: 원시적 메서드"]
direction TB
R1["Object 반환 타입"]:::customNode
P1["Object[] 매개변수"]:::customNode
R1 -->|"반환 시"| C1["클라이언트에서 형변환 필요"]:::issue
P1 -->|"호출 시"| W1["컴파일러 경고 발생"]:::issue
W1 -->|"런타임"| E1["ClassCastException 위험"]:::issue
end
class R1,P1,C1,W1,E1 stage1
subgraph 단계2["2단계: 제네릭 메서드"]
direction TB
R2["<T> 타입 매개변수 도입"]:::customNode
P2["T... 가변인자"]:::customNode
R2 -->|"컴파일 시"| B1["타입 안전성 보장"]:::benefit
P2 -->|"사용 시"| B2["형변환 불필요"]:::benefit
B1 -->|"장점"| A1["컴파일 타임 오류 검출"]:::benefit
B2 -->|"장점"| A2["코드 가독성 향상"]:::benefit
end
class R2,P2,B1,B2,A1,A2 stage2
subgraph 단계3["3단계: 고급 활용"]
direction TB
U1["제네릭 싱글턴 팩토리"]:::customNode
U2["재귀적 타입 한정"]:::customNode
U1 -->|"사용"| B3["불변 객체의 타입별 재사용"]:::benefit
U2 -->|"활용"| B4["타입 매개변수 제약 설정"]:::benefit
end
class U1,U2,B3,B4 stage3
%% 흐름선
단계1 --> 단계2
단계2 --> 단계3
1️⃣ 원시적 메서드 구현 (타입 불안전)
2️⃣ 제네릭 메서드 구현 (타입 안전성 확보)
3️⃣ 고급 활용 기법
📚 필수 개념 정리
🔑 제네릭 메서드 작성법
💡 제네릭 싱글턴 팩토리
🧐 재귀적 타입 한정(Recursive Type Bound)
❓ 재귀적 타입 한정(Recursive Type Bound)이 왜 필요한가요?
💡 타입 추론과 제네릭 메서드
🔥 제네릭 메서드의 이점과 한계
🎯 중요한 점
💡 코드 예제 및 설명
✅ 제네릭 메서드의 다양한 활용
✅ 재귀적 타입 한정을 이용한 예제
❗ 어려웠던 점
💭 느낀 점
Last updated