| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- c#
- multi-thread
- git
- PS
- Network Programming
- Online Judge
- BOJ
- Data Structure
- 독서
- Toy Project
- C++
- Unity
- System Programming
- Today
- Total
I'm FanJae.
[20260519] C# 정리 ( 확장 메서드 ) 본문
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를 정의해서 사용한다.
- 확장 메서드는 문자열 처리, 리스트 출력, 숫자 판별, 게임 데이터 편의 기능처럼 자주 쓰는 기능을 자연스럽게 호출하고 싶을 때 유용하다.
'Unity > Unity 초격차캠프' 카테고리의 다른 글
| [20260520] Unity ( Unity Editor 기본 ) (0) | 2026.05.20 |
|---|---|
| [20260520] Unity ( Unity의 기본 개념 ) (0) | 2026.05.20 |
| [20260519] C# 정리 ( LINQ ) (0) | 2026.05.19 |
| [20260519] C# 정리 ( Lambda Expression ) (0) | 2026.05.19 |
| [20260518] Git 용어 정리 (0) | 2026.05.18 |