본문 바로가기

C#

C# 확장 메서드

1. 개념 설명

확장 메서드는 기존 타입을 수정하지 않고 새로운 메서드를 추가하는 문법입니다. static 클래스 안의 static 메서드 첫 번째 매개변수에 this 타입을 붙여 선언합니다. 인스턴스 메서드처럼 점(.)으로 호출하지만 실제로는 정적 호출로 컴파일됩니다. 사용하려면 정의된 네임스페이스를 using으로 가져와야 합니다.

2. 코드 예제

문자열을 뒤집는 메서드와 정수의 짝수 여부를 판단하는 확장을 만들어 보겠습니다.

using System;

namespace Demo
{
    public static class MyExtensions
    {
        public static string Reverse(this string s)
        {
            if (s == null) return string.Empty;
            var arr = s.ToCharArray();
            Array.Reverse(arr);
            return new string(arr);
        }

        public static bool IsEven(this int n) => n % 2 == 0;
    }

    class Program
    {
        static void Main()
        {
            Console.WriteLine("Hello".Reverse()); // olleH
            Console.WriteLine(42.IsEven());       // True
        }
    }
}

출력은 각각 olleH와 True입니다. 확장 메서드는 체이닝도 가능하여 "abc".Reverse().ToUpper()처럼 사용할 수 있습니다.

3. 주의사항/팁

인스턴스 메서드가 동일 시그니처로 존재하면 확장 메서드보다 우선됩니다. 과도한 확장은 가독성을 해치므로 공통 도메인에만 정의하고 적절한 네임스페이스로 분리합니다. LINQ처럼 제네릭 확장은 강력하지만 비공개 멤버에는 접근할 수 없습니다. 성능이 중요하면 불필요한 할당과 박싱을 피하는 구현을 선택하세요.

'C#' 카테고리의 다른 글

C# 인터페이스와 추상 클래스 비교  (0) 2026.04.02
C# 속성 (Properties)과 자동 속성  (0) 2026.04.01
C# 델리게이트와 이벤트  (0) 2026.03.31
C# 제네릭 (Generics) 기초  (0) 2026.03.31
C# Nullable 참조 타입  (0) 2026.03.30