이것이 C#이다(Chapter 13-1 대리자) ★★★★★

2026. 4. 6. 12:42·C#/Study

중요도 기준(★ ~ ★★★★★)

 

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

> 대리자가 메소드를 참조하기 위해서는 대리자 객체(인스턴스)가 필요함.


> 아래 순서대로 대리자의 메소드 호출은 실행됨.

  1. 호출자의 참조된 대리자 호출
  2. 대리자의 참조된 메소드 호출
  3. 참조된 메소드 실행
  4. 참조된 메소드의 반환값을 호출자에게 전달

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
'C#/Study' 카테고리의 다른 글
  • 이것이 C#이다(Chapter 13-2 이벤트) ★★★★★
  • 이것이 C#이다(Chapter 15. LINQ) ★★★★
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
이것이 C#이다(Chapter 13-1 대리자) ★★★★★
상단으로

티스토리툴바