I'm FanJae.

[20260519] C# 정리 ( 확장 메서드 ) 본문

Unity/Unity 초격차캠프

[20260519] C# 정리 ( 확장 메서드 )

FanJae 2026. 5. 19. 21:54

1. 확장 메서드란?

- 확장 메서드는 기존 클래스에 새로운 메서드를 추가한 것처럼 사용할 수 있게 해주는 문법이다.

- string에는 원래 ReverseString() 이라는 메서드가 없다.

- 하지만 확장 메서드를 만들면 이렇게 사용할 수 있다.

string text = "Hello";
string result = text.reverseString();

- string 클래스 안에 ReverseString() 메서드가 있는 것처럼 보인다.


2. 필요한 이유

- 문자열을 뒤집는 기능을 일반 메서드로 만들면 이렇게 호출해야 한다.

string result = StringUtil.ReverseString(text);

- 확장 메서드로 만들면 이렇게 쓸 수 있다.

string result = text.ReverseString();

- 기능 자체는 외부에 따로 만들지만, 사용하는 입장에서는 기존 타입의 메서드처럼 호출할 수 있다.


3. 기본 형태

- 확장 메서드는 다음 조건을 지켜야 한다.

- 확장 메서드는 반드시 static class 안에 정의해야 하고, 첫 번째 매개변수 앞에 this를 붙여 확장할 타입을 지정해야 한다.

public static class ExtensionClass
{
	public static 반환형 메서드이름(this 확장할타입 변수명, 추가매개변수)
	{
		// 메서드 구현
	}
}

4. 문자열 뒤집기 예시

public static class StringExtensions
{
    public static string ReverseString(this string str)
    {
        if (string.IsNullOrEmpty(str))
        {
            return str;
        }

        char[] array = str.ToCharArray();

        Array.Reverse(array);

        return new string(array);
    }
}
string original = "Hello, World";

string reverseStr = original.ReverseString();
// 마치 String 안에 구현되어 있는 메서드 처럼 쓰고 있다.

Console.WriteLine(reverseStr);

- 마치 String 안에 구현되어 있는 메서드처럼 사용하고 있다.


5. 단어 개수 세기 예시

public static int WordCount(this string str)
{
    if (string.IsNullOrWhiteSpace(str))
    {
        return 0;
    }

    string[] words = str.Split(' ', StringSplitOptions.RemoveEmptyEntries);

    return words.Length;
}
 

- 문자열을 공백 기준으로 나누고, 단어 개수를 반환한다.

- StringSplitOptions.RemoveEmptyEntries는 연속된 공백 때문에 생기는 빈 문자열을 제거하기 위해 사용한다.


6. 문자열 길이 검사 예시

public static bool IsLonger(this string str, int length)
{
    if (str == null)
    {
        return false;
    }

    return str.Length > length; // 문자열 길이보다 긴지 확인
}
string text = "Hello";

bool result = text.IsLonger(3);

- 핵심은, 마치 string 클래스에 ‘구현’되어 있는 것처럼 사용할 수 있다.


7. List 확장 메서드 예시

public static class ListExtensions
{
    public static void PrintAll<T>(this List<T> list)
    {
        if (list == null)
        {
            return;
        }

        if (list.Count == 0)
        {
            Console.WriteLine("리스트가 비어있다.");
            return;
        }

        foreach (T item in list)
        {
            Console.WriteLine(item);
        }
    }
}
List<string> names = new List<string>()
{
    "홍길동",
    "홍길서",
    "홍길남",
    "홍길북"
};

names.PrintAll();

- 핵심은 마치 List<T> 타입에 PrintAll()이라는 기능을 추가한 것처럼 사용한다.


8. 주의 사항

- 확장 메서드는 편리하지만, 실제로 기존 클래스를 수정하는 것은 아니다. static class 안에 있는 메서드를 마치 인스턴스 메서드처럼 호출하는 것일 뿐이다.

- 확장 메서드를 너무 많이 만들면 문제가 생길 수 있다.

1. 어떤 클래스에 원래 있던 메서드인지 헷갈릴 수 있다.
2. 프로젝트 전체에서 메서드 출처를 찾기 어려워질 수 있다.
3. 너무 일반적인 이름을 쓰면 충돌 가능성이 있다.
4. 남용하면 코드 흐름이 오히려 복잡해질 수 있다.

9. 정리

- 확장 메서드는 기존 타입에 새로운 메서드를 추가한 것처럼 사용할 수 있게 해주는 문법이다. 실제로 기존 클래스를 수정하는 것은 아니며, 외부 static class 안에 static method를 정의해서 사용한다.

- 확장 메서드는 문자열 처리, 리스트 출력, 숫자 판별, 게임 데이터 편의 기능처럼 자주 쓰는 기능을 자연스럽게 호출하고 싶을 때 유용하다.

Comments