더북(TheBook)

대리자로 함수 대신 호출

델리게이트로 발음하는 대리자는 ‘함수 포인터’라고도 합니다. 다른 함수(메서드)를 대신 호출하는 개념입니다.

Hello() 이름으로 간단히 문자열만 출력하는 메서드를 대신 호출하는 SayPointer 대리자를 생성하고 사용하는 예제를 만들어 보겠습니다. 다음 내용을 입력한 후 실행해 보세요.

대리자로 함수를 대신 호출: DelegateNote.cs

using System;

class DelegateNote
{
    //① 대리자 생성: 매개변수도, 반환값도 없는 함수(메서드)를 담을 수 있는 포인터
    delegate void SayPointer();

    //② 샘플 함수 생성
    static void Hello() => Console.WriteLine("Hello Delegate");

    static void Main()
    {
        //ⓐ 대리자의 인스턴스 생성 후 매개변수로 대신 실행할 함수 이름 전달
        SayPointer sayPointer = new SayPointer(Hello);

        //ⓑ 대리자 인스턴스로 함수 대신 호출하는 두 가지 방법
        sayPointer();       //대리자 변수에 괄호를 붙여 메서드 호출
        sayPointer.Invoke(); //명시적으로 Invoke() 메서드 호출
    }
}

실행 결과

Hello Delegate
Hello Delegate

에서 delegate 키워드를 사용하여 void SayPointer()로 매개변수도 반환값도 없는 메서드를 대신 호출하는 대리자를 만들었습니다.

에서는 SayPointer 대리자에 담아 실행할 테스트 메서드인 Hello()를 만들었습니다.

처럼 SayPointer의 인스턴스를 만들고 생성자 대신 실행할 메서드 이름을 지정하는 식으로 대리자 개체를 생성할 수 있습니다.

에서는 대리자 인스턴스 개체를 사용하여 메서드를 호출하는 두 가지 방법을 보여 줍니다. 하나는 직접 괄호를 붙여 메서드처럼 호출하는 것이고, 다른 하나는 Invoke() 메서드를 명시적으로 호출해서 실행하는 방법입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.