🌍 C# Study/이펙티브 C#
[27] 인터페이스는 간략히 정의하고 기능의 확장은 확장 메서드를 사용하라
맨텀
2021. 4. 28. 15:54
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.
확장 메서드를 이용하면 인터페이스의 기능을 손쉽게 확장할 수 있다.
System.Linq.Enumerable 클래스가 대표적인 예다.
IEnumerable<T>는 기본적인 구현만 가지고 있으며,
Where, OrderBy, ThenBy, GroupInfo 등은 확장 메서드로 구현되어있다.
확장의 예시
- IComparable<T>의 경우 left.CompareTo(right) 와 같은 형태로 사용하며 리턴되는 값이
left가 right보다 작은 경우 0보다 작은 값을 반환한다.
- 이 경우 익숙하지않은 개발자에게는 혼란을 줄 여지가 있다. 아래와 같이 기존 메서드를 활용하여 확장 메서드로 재정의한다면 실수로 사용하는 일은 줄어들게 될 것이다.
public static class Comparable
{
public static bool LessThan<T>(this T left, T right)
where T : IComparable<T> => left.CompareTo(right) < 0;
}
확장 메서드와 내부 메서드의 충돌
- 특정 인터페이스에 대해 구현한 확장 메서드와 클래스 내부 메서드의 이름이 겹칠경우 문제가 생길 수 있다.
- 이 경우 의미적으로 완전히 동일한 작업을 수행하도록 작성해야한다.
결론
- 인터페이스의 멤버의 수를 최소한으로 줄이고, 추가 기능은 확장 메서드를 활용하라.
이를 통해 반드시 작성해야 하는 코드의 양을 줄이고 풍부한 기능을 제공할 수 있다.