29. 이왕이면 제네릭 타입으로 만들라
📝 아이템 29: 이왕이면 제네릭 타입으로 만들라
🔹 핵심 요약
🔹 주의 사항
🔹 제네릭 타입의 필요성: 코드 진화 과정
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
H1[StudentHolder]:::customNode
H2[ProfessorHolder]:::customNode
H3[기타 정보별 Holder...]:::customNode
H1 -->|"필드: StudentInfo info"| P1[코드 중복]:::issue
H2 -->|"필드: ProfessorInfo info"| P1
H3 --> P1
end
class H1,H2,H3,P1 stage1
subgraph 단계2["2단계: Object 기반 홀더"]
direction TB
OH[InfoHolder]:::customNode
OH -->|"필드: Object info"| P2[타입 불안전]:::issue
P2 -->|"문제점"| C1["런타임 형변환 오류"]:::issue
P2 -->|"사용 시"| C2["명시적 형변환 필요<br>(ProfessorInfo)holder.info"]:::issue
end
class OH,P2,C1,C2 stage2
%% 3단계: 제네릭 홀더 (타입 안전)
subgraph 단계3["3단계: 제네릭 홀더"]
direction TB
GH["InfoHolder<T>"]:::customNode
GH -->|"필드: T info"| B1[타입 안전]:::benefit
B1 -->|"장점"| A1["컴파일 타임 타입 검사"]:::benefit
B1 -->|"장점"| A2["형변환 불필요<br>holder.info.grade"]:::benefit
end
class GH,B1,A1,A2 stage3
%% 흐름선
단계1 --> 단계2
단계2 --> 단계3
1️⃣ 기본 클래스 구현 (코드 중복)
2️⃣ Object 타입 사용 (타입 불안전)
3️⃣ 제네릭 타입 사용 (타입 안전성 확보)
📚 필수 개념 정리
🔑 제네릭 타입 설계 방법
💡 제네릭 타입의 제약
🧐 제네릭 배열을 직접 만들 수 없는 이유
❓ 이 코드의 결과는?
💡 제네릭의 타입 소거
🔥 타입 소거의 영향
🎯 중요한 점
💡 코드 예제 및 설명
✅ 제네릭 배열 생성 방법 - 두 가지 방법
❗ 어려웠던 점
💭 느낀 점
Last updated