C#의 Reflection.Emit은 런타임에 동적으로 어셈블리와 메서드를 생성할 수 있는 강력한 기능입니다. 이를 통해 실행 중인 프로그램에 새로운 타입이나 메서드를 추가하거나, 고성능 동적 코드를 작성할 수 있습니다.
1. Reflection.Emit 기본 개념
Reflection.Emit은 System.Reflection.Emit 네임스페이스에 포함되어 있으며, 런타임에 어셈블리, 모듈, 타입, 메서드 등을 생성하는 API를 제공합니다. IL(중간언어) 코드를 직접 작성해서 동적 메서드를 만듭니다.
2. 간단한 동적 메서드 생성 예제
아래 예제는 두 정수를 더하는 메서드를 런타임에 생성하는 코드입니다.
using System;
using System.Reflection.Emit;
public class DynamicCodeExample
{
public static void Main()
{
var method = new DynamicMethod("Add", typeof(int), new[] { typeof(int), typeof(int) });
var il = method.GetILGenerator();
il.Emit(OpCodes.Ldarg_0); // 첫 번째 매개변수 로드
il.Emit(OpCodes.Ldarg_1); // 두 번째 매개변수 로드
il.Emit(OpCodes.Add); // 더하기
il.Emit(OpCodes.Ret); // 반환
var add = (Func)method.CreateDelegate(typeof(Func));
int result = add(10, 20);
Console.WriteLine($"10 + 20 = {result}");
}
}
3. 활용 팁
Reflection.Emit을 사용할 때는 IL 명령어 순서와 스택 관리를 주의해야 합니다. 복잡한 코드는 디버깅이 어렵기 때문에 간단한 기능부터 시작하는 것이 좋습니다.
동적 프록시 생성, AOP, 고성능 직렬화 등 다양한 분야에 활용 가능합니다.
'C#' 카테고리의 다른 글
| C# 메서드 체이닝(Method Chaining) 패턴 구현 (0) | 2026.06.04 |
|---|---|
| C# PriorityQueue<T>를 이용한 우선순위 작업 처리 (0) | 2026.06.04 |
| C# 이벤트 필터링으로 불필요한 이벤트 호출 방지 (0) | 2026.06.02 |
| C# 동적 어셈블리 생성과 실행 (0) | 2026.06.02 |
| C# Dictionary의 커스텀 키 해싱 전략 구현 (0) | 2026.06.02 |