중요도 기준(★ ~ ★★★★★)
1. 대리자란? : ★★★
- 메소드 참조를 통해 해당 메소드의 호출 권한을 가지며, 다른 곳에서 대리자를 호출시 참조하고 있는 메소드들을 실행하는 키워드
- 메소드에 대한 참조
2. 대리자 형식 : ★★★★★
// 한정자 delegate 반환형식 대리자이름(매개변수);
public delegate int MyDelegate(int a, int b);
3. 대리자의 메소드 참조 및 호출 : ★★★★★
1) 참조될 메소드 정의
int Plus(int a, int b)
{
return a + b;
}
int Minus(int a, int b)
{
return a - b;
}
> 기본적으로 참조할 메소드는 대리자의 반환형식과 매개변수가 동일해야 함.(위 대리자 형식 참고)
2) 대리자의 참조 및 호출
MyDelegate Callback; // 대리자 객체 생성
Callback = new MyDelegate(Plus); // 대리자 메소드 참조
Console.WriteLine(Callback(3, 4)); // 7
Callback = new MyDelegate(Minus); // 대리자 메소드 참조
Console.WriteLine(Callback(7, 5)); // 2
> 대리자가 메소드를 참조하기 위해서는 대리자 객체(인스턴스)가 필요함.

> 아래 순서대로 대리자의 메소드 호출은 실행됨.
- 호출자의 참조된 대리자 호출
- 대리자의 참조된 메소드 호출
- 참조된 메소드 실행
- 참조된 메소드의 반환값을 호출자에게 전달
4. 일반화 대리자 : ★★
> 일반화 대리자란 형식 매개변수(T) 를 이용하여 대리자를 선언하여, 매개변수를 일반화 시키는 것을 말함.
1) 구조
delegate int Compare<T>(T a, T b);
> 형식 매개변수(T)의 변경에 따라 매개변수는 변경될 수 있다.
5. 대리자 체인 : ★★★★
> 대리자 체인이란 여러 개의 메소드를 참조하여 호출할 수 있는 기능을 말함.
1) 참조 메서드들 정의
void Call119(string location)
{
Console.WriteLine("소방서죠? 불 났어요! 주소는 {0}", location);
}
void ShotOut(string location)
{
Console.Writeline("피하세요! {0}에 불이 났어요! ", location);
}
void Escape(string location)
{
Console.WriteLine("{0}에서 나갑시다!", location);
}
2) 메서드 참조 체인
// 대리자
delegate void ThereIsAFire( string location );
// +, = 연산자 사용
ThereIsAFire Fire = new ThereIsAFire(Call119)
+ new ThereIsAFire(Shoutout)
+ new ThereIsAFire(Escape);
// Delegate.Combine() 사용
ThereIsAFire Fire = (ThereIsAFire) Delegate.Combine(
new ThereIsAFire(Call119),
new ThereIsAFire(Shoutout),
new ThereIsAFire(Escape));
> +, = 연산자를 사용하거나,
Combine() 함수를 사용해서 추가함.
6. 익명 메소드 : ★★★★(람다식 연계됨)
> 기본적으로 메소드들은 이름을 가지는 반면, 익명 메소드는 이름이 없음.
1) 대리자 유무
delegate int Calculate(int a, int b);
> 익명 메소드가 있기 위해서는 대리자가 필요함
2) 익명 메소드 형식
delegate(매개변수)
{
반환값
}
> 대리자 키워드가 필요하고, 이름이 없음.
Calculate Calc; // 대리자의 객체
// 익명 메소드
Calc = delegate(int a, int b) // 대리자 객체에 메소드 구현이 담긴 코드 블록을 참조
{
return a + b;
};
// 익명 메소드를 참조하는 대리자 객체 호출
Console.WriteLine("3 + 4 = {0}", Calc(3, 4));
> 익명 메소드는 대리자 형식의 반환값, 매개변수와 일치해야 함
'C# > Study' 카테고리의 다른 글
| 이것이 C#이다(Chapter 13-2 이벤트) ★★★★★ (0) | 2026.05.01 |
|---|---|
| 이것이 C#이다(Chapter 15. LINQ) ★★★★ (0) | 2026.04.25 |
