익명 메서드(Anonymous Method)는 말 그대로 이름이 없는 메서드입니다. 별도로 메서드를 정의하지 않고도 코드 블록을 델리게이트(delegate) 매개변수로 직접 전달할 수 있게 해주는 강력한 기법으로, 짧고 일회성적인 로직을 작성할 때 코드를 훨씬 간결하게 만들어 줍니다.
익명 메서드의 선언 방식
익명 메서드는 delegate 키워드를 사용하여 델리게이트 인스턴스를 생성하는 시점에 함께 선언됩니다. 즉, 델리게이트 변수에 대입되는 순간 해당 코드 블록이 하나의 메서드처럼 동작하게 됩니다.
기본 문법은 다음과 같습니다.
delegate(매개변수) {
// 실행할 코드
};
예제 코드
아래 예제에서는 익명 메서드로 델리게이트를 먼저 호출한 후, 이름이 있는 일반 메서드(Named Method)로 델리게이트를 교체하여 호출하는 과정을 보여줍니다.
using System;
delegate void Demo(int n);
namespace DelegateAppl {
class TestDelegate {
static int num = 50;
public static void AddNum(int p) {
num += p;
Console.WriteLine("Named Method: {0}", num);
}
public static void MultNum(int q) {
num *= q;
Console.WriteLine("Named Method: {0}", num);
}
public static int getNum() {
return num;
}
static void Main(string[] args) {
// 익명 메서드를 사용해 델리게이트 인스턴스 생성
Demo d = delegate(int x) {
Console.WriteLine("Anonymous Method: {0}", x);
};
// 익명 메서드를 통해 델리게이트 호출
d(100);
// 이름이 있는 메서드로 델리게이트 인스턴스화
d = new Demo(AddNum);
// 이름이 있는 메서드를 통해 델리게이트 호출
d(5);
// 또 다른 이름의 메서드로 델리게이트 재할당
d = new Demo(MultNum);
// 이름이 있는 메서드를 통해 델리게이트 호출
d(2);
Console.ReadKey();
}
}
}
실행 결과
Anonymous Method: 100 Named Method: 55 Named Method: 110
핵심 부분 분석
위 예제에서 익명 메서드에 해당하는 부분은 바로 아래 코드입니다. 별도의 메서드 이름 없이 delegate 키워드만으로 곧바로 구현 로직이 연결되는 것을 확인할 수 있습니다.
Demo d = delegate(int x) {
Console.WriteLine("Anonymous Method: {0}", x);
};
익명 메서드의 장점
- 코드 간결성: 간단한 로직이라면 굳이 클래스 내부에 새로운 메서드를 정의하지 않아도 됩니다.
- 가독성 향상: 델리게이트에 전달되는 코드가 호출 지점 근처에 위치하므로 흐름을 파악하기 쉽습니다.
- 일회성 작업에 적합: 한 번만 사용되는 콜백 로직 등에 유용하게 활용됩니다.
참고로 C# 3.0부터 도입된 람다 식(Lambda Expression)은 이러한 익명 메서드를 더욱 축약한 형태이므로, 최신 C# 코드에서는 주로 람다 식이 사용됩니다. 하지만 레거시 코드나 특정 상황에서는 여전히 익명 메서드 문법을 접할 수 있으므로 개념을 잘 이해해 두는 것이 좋습니다.