728x90
응용프로그램에서 List, Dictionary와 같이 이미 구체화된 제네릭 컬렉션을 사용하는 경우는 꽤 많다.
제네릭 컬렉션을 사용하는 이유는?
특정 타입의 집합을 다뤄야 하거나, 컬렉션이 제공하는 고유의 기능을 활용하기 위해서이다.
사용 중인 컬렉션 타입에 영향을 주지 않으면서 새로운 기능을 추가하고 싶으면 구체화된 컬렉션 타입에 대해 확장 메서드를 작성한다.
타입 매개변수로 특정 숫자 타입이 전달되었을 경우에만 사용되는 메서드들이 있다.
구체적으로 IEnumerable, IEnumerable, IEnumerable, IEnumerable 등으로 타입 매개변수가 지정된 경우에 특화된 메서드가 있다.
IEnumerable에 대한 확장 메서드 확인하기
public static class Enumerable
{
public static int Average(this IEnumerable<int> sequence);
public static int Max(this IEnumerable<int> sequence);
public static int Min(this IEnumerable<int> sequence);
public static int Sum(this IEnumerable<int> sequence);
}
위 패턴은 타입 매개변수로 특정 타입이 주어질 때, 해당 타입에 대해 가장 효과적으로 동작하도록 코드 분리해서 구현하는 방법이다.
파생 클래스에 메서드 추가하는 방식보다 확장 메서드 활용이 나은 이유
확장 메서드 : IEnumerable 기반으로 작성된다.
파생 클래스에 메서드 추가 : List를 기반으로 하기 때문에 추가로 이터레이터 메서드를 사용할 수 없다.
- 단순한 기능을 제공하는 메서드를 다양하게 재사용할 수 있다.
- 컬렉션 고유의 저장소 모델과 무관하게 기능을 구현할 수 있다.
반응형
'개발공부 > C#' 카테고리의 다른 글
[Effective C#] 아이템 30: 루프보다 쿼리 구문이 낫다. (0) | 2021.12.06 |
---|---|
[Effective C#] 아이템 29 : 시퀀스를 반환해야 하는 경우 컬렉션을 반환하기보다 이터레이터를 반환하는 것이 낫다. (0) | 2021.12.05 |
[Effective C#] 아이템 27 : 인터페이스는 간략히 정의하고 기능의 확장은 확장 메서드를 사용하라 (0) | 2021.12.03 |
[Effective C#] 아이템 26 : 제네릭 인터페이스와 논제네릭 인터페이스를 함께 구현하라 (0) | 2021.12.02 |
[Effective C#] 아이템 25 : 타입 매개변수로 인스턴스 필드를 만들 필요가 없다면 제네릭 메서드를 정의하라 (0) | 2021.12.01 |