C#에서 제네릭과 비제네릭의 차이
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
C# 개발자, 중급 이상의 소프트웨어 개발자
난이도: 중급 (타입 안전성과 성능 최적화에 대한 이해 필요)
핵심 요약
- 제네릭: 컴파일 시 타입 검증 가능, 런타임 오류 방지
- 비제네릭:
object
타입 사용으로 캐스팅 필요, boxing/unboxing 성능 저하 - 제네릭:
List
,Dictionary
등 재사용 가능한 코드 작성
섹션별 세부 요약
1. 제네릭의 장점
- 타입 안전성:
List
와 같이 데이터 타입 명시 시 런타임 캐스팅 오류 방지 - 성능 향상: 값 타입(value type)에서 boxing/unboxing 작업 생략
- 코드 재사용성:
T
와 같은 일반화된 제네릭 메서드/클래스 사용 가능
2. 비제네릭의 단점
- 타입 불안전성:
List
사용 시 임의의 타입 삽입 가능 - 런타임 오류 위험:
string
을int
로 캐스팅 시 예외 발생 가능성 - 성능 저하: 값 타입(value type)이
object
로 boxing되어 메모리 사용 증가
3. 실무 적용 예시
- 제네릭 사용:
public void ProcessData
(List data) - 비제네릭 사용:
public void ProcessData(List
- 성능 비교:
List
는List
보다 30% 이상 빠른 접근 성능 (Microsoft 공식 문서 기준)
결론
- 제네릭을 사용할 때:
List
,Dictionary
등 타입 파라미터를 명시한 제네릭 컬렉션 사용 - 비제네릭은 피할 것:
object
타입 사용으로 인한 런타임 오류와 성능 저하 방지 - 핵심 팁: 제네릭은 타입 안전성과 성능 최적화를 위해 모든 컬렉션 및 메서드에 적용해야 함