개발공부/C#

[Effective C#] 아이템 28 : 확장 메서드를 이용하여 구체화된 제네릭 타입을 개선하라

개발자 찐빵이 2021. 12. 4. 00:15
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를 기반으로 하기 때문에 추가로 이터레이터 메서드를 사용할 수 없다.

  • 단순한 기능을 제공하는 메서드를 다양하게 재사용할 수 있다.
  • 컬렉션 고유의 저장소 모델과 무관하게 기능을 구현할 수 있다.
반응형