개발공부/C#

[Effective C#] 아이템 35 : 확장 메서드는 절대 오버로드하지 마라

개발자 찐빵이 2021. 12. 10. 22:15
728x90

확장 메서드를 사용하는 경우

대부분 기존에 개발된 타입을 개선하기 위해 사용한다.
동작 방식 변경을 위한 게 아니다.

확장 메서드를 잘못 사용한 예

확장 메서드를 이용하여 클래스를 확장하는 경우

namespace ConsoleExtensions
{
    public static class ConsoleReport
    {
        public static string Format(this Person target) =>
            $"{target.LastName, 20}, {target.FirstName, 15}";
    }
}

네임스페이스를 달리하여 확장 메서드를 추가로 정의하는 경우

namespace XmlExtensions
{
    public static class XmlReport
    {
        public static string Format(this Person target) =>
            new XElement("Person",
                new XElement("LastName", target.LastName),
                new XElement("FirstName", target.FirstName)
                ).ToString();
    }
}

실수로 네임스페이스를 잘못 참조하면 프로그램의 동작 방식이 바뀌어버린다.
또는 참조하지 않으면 프로그램이 컴파일되지 않는다.

결론

확장 메서드를 여러 네임스페이스 걸쳐 오버로드 하면 안 된다.
컴파일러가 using 문장을 기반으로 오버 로드된 메서드 중 하나를 선택하는 이상한 상황이 벌어지기 때문이다.
대신 메서드의 이름을 달리하고 정적 메서드로 작성하는 것을 고려해야 한다.

반응형