[27] 인터페이스는 간략히 정의하고 기능의 확장은 확장 메서드를 사용하라

다음 본문은 도서 이펙티브 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;
}

 

확장 메서드와 내부 메서드의 충돌

 - 특정 인터페이스에 대해 구현한 확장 메서드와 클래스 내부 메서드의 이름이 겹칠경우 문제가 생길 수 있다.

 - 이 경우 의미적으로 완전히 동일한 작업을 수행하도록 작성해야한다.

 

결론

 - 인터페이스의 멤버의 수를 최소한으로 줄이고, 추가 기능은 확장 메서드를 활용하라.

   이를 통해 반드시 작성해야 하는 코드의 양을 줄이고 풍부한 기능을 제공할 수 있다.

 

 

 

댓글

Designed by JB FACTORY