728x90
제네릭 타입
Generic Type Definition : 타입을 제네릭의 형태로 정의하는 것
Closed Generic Type : 타입 매개변수에 구체적인 타입을 지정한 경우
Open Generic Type : 여러 타입 매개변수 중 일부만 구체적인 타입을 지정한 경우
제네릭 타입의 타입 매개변수가 Value 타입일 때 장점
- 박싱과 언박싱을 피할 수 있다.
- 코드와 데이터의 크기가 줄어들고 성능이 개선된다.
- 컴파일러가 타입 매개변수에 대한 타입 안정성을 보장해준다.
- 런타임에 타입 유형을 매번 확인할 필요가 없다.
제네릭 타입의 장점
타입 매개변수에 새로운 타입을 지정하여 손쉽게 재사용할 수 있다.
타입 매개변수에 새로운 타입을 지정 = 유사한 기능을 가진 새로운 타입을 생성
타입, 메서드 제네릭화의 단점
- 구체적인 타입이 주는 장점을 잃는다.
- 타입의 세부 특성까지 고려하여 최적화한 알고리즘을 사용할 수 없다.
- 그래서 만약 어떤 알고리즘이 특정 타입에 대해 더 효율적으로 동작한다고 생각하면 그냥 그 타입을 사용해라.*
예시
1. IEnumerable<T> 대신 IList<T> 사용하기
IEnumerable<T>를 사용했을 때 복제본을 만들어야 하고, 대부분의 컬렉션들이 랜덤 액세스를 지원하기 때문에 비효율적이다.
IList<T>를 사용하면 복제본을 만들 이유가 없어지고, 매개변수가 IList<T>타입인 것을 컴파일 타임에 알 수 있으므로 구현이 더 용이해진다.
IList<T> 객체라도 컴파일 타임에 IEnumerable<T>으로 간주될 경우를 대비하여 IList<T> 타입의 매개변수를 취하는 생성자 오버로드 메서드 외에도 런타임 타입을 확인하도록 코드를 작성한다.
마치기 전
ReverseEnumerable<T> 내에서 수행되는 매개변수에 대한 테스트는 모두 런타임에 이루어진다.
즉, 추가 기능을 확인하는 과정에 일정 부분 비용이 발생한다.
하지만 대부분 이 비용은 모든 요소를 복사하는 것에 비해 훨씬 적다.
반응형
'개발공부 > C#' 카테고리의 다른 글
[Effective C#] 아이템 21 : 타입 매개변수가 IDisposable을 구현한 경우를 대비하여 제네릭 클래스를 작성하라 (0) | 2021.11.27 |
---|---|
[Effective C#] 아이템 20 : IComparable<T>와 IComparer<T>를 이용하여 객체의 선후 관계를 정의하라 (0) | 2021.11.26 |
[Effective C#] 아이템 18 : 반드시 필요한 제약 조건만 설정하라 (0) | 2021.11.24 |
[Effective C#] 아이템 17 : 표준 Dispose 패턴을 구현하라 (0) | 2021.11.23 |
[Effective C#] 아이템 7 : 델리게이트를 이용하여 콜백을 표현하라 (0) | 2021.11.22 |