기술 지식을 쌓자 #3 콜백, delegate, event

덴바·2024년 7월 28일

기술 정리

목록 보기
3/6

이 포스팅은 제가 직접 공부하고 제 방식대로 내용을 정리한 글입니다.



using System;

class Program
{
    // 델리게이트 정의
    public delegate int MyCallback(int a, int b);

    // 덧셈 메서드
    static int Add(int a, int b)
    {
        return a + b;
    }

    // 곱셈 메서드
    static int Multiply(int a, int b)
    {
        return a * b;
    }

    static void Main(string[] args)
    {
        MyCallback MathOperation;
        
        MathOperation = Add;
        
        Console.WriteLine(MathOperation(3, 4));
        
        MathOperation = Multiply;
        
        Console.WriteLine(MathOperation(7, 5));
    }
}

Q1. 위 코드의 출력 결과는 무엇인가요? 그 이유는 무엇인가요?

A1. 출력 결과 -> 7, 35
delegate 대리자에 연결된 메서드에 따라 다양한 결과가 나옵니다.
해당 코드의 경우, Add 메서드가 연결된 후, Console.WriteLine이 실행되어 7이 나오고, 다시 Multiply 메서드가 연결되면서 35가 출력됩니다.

Q2. 위 코드의 Main 함수를 아래처럼 바꿔도 같은 방식으로 동작할까요? 그 이유는 무엇인가요?

static void Main(string[] args)
{
    Func<int, int, int> MathOperation;

    MathOperation = Add;

    Console.WriteLine(MathOperation(3, 4));

    MathOperation = Multiply;

    Console.WriteLine(MathOperation(7, 5));
}

A2. 동일하게 작동됩니다.
Func 또한 delegate와 같은 대리자이며, <> 내에 있는 마지막 타입으로 값을 반환합니다.

Q3. 델리게이트를 사용하여 메서드를 매개변수로 전달하는 장점은 무엇인가요?

델리게이트의 장점은 여러 메서드를 동시 호출해야할 때, delegate에 여러 메서드를 연결하여, 동시에 실행할 수 있다는 편리성이 있습니다.


Q1. 콜백이란 무엇인가요?

A1. Callback이란 단어 뜻 그대로 Call과 Back이 합쳐진 용어로 메서드를 실행하고 그 결과를 돌려받는 것을 의미합니다.

Q2. 델리게이트(delegate; 대리자)란 무엇인가요?

A2. C/C++에서 사용하는 포인터와 같은 기능으로 대리자인 델리게이트에 연결한 메서드의 주소를 저장하며, 델리게이트를 실행 시, 연결된 주소를 통해 메서드를 실행합니다.

Q3. C#의 event란 무엇인가요?

A3. event는 delegate와 함께 사용하며, 클래스 내에 특정한 일(Event)가 발생했음을 알리는 용도로 사용합니다. event는 외부 클래스에서 사용할 수 없고, 선언한 클래스 내에서 사용할 수 있습니다. Event가 실행되면, delegate에 구독된 함수로 부터 이벤트 발생을 전파하여 각 메서드를 실행하게 합니다.

Q4. Unity에서 사용하는 델리게이트 혹은 이벤트에는 어떤 것이 있나요?

A4. Unity 전용 델리게이트와 이벤트는 UnityAction, UnityEvent, EventHandler가 있습니다.

profile
배움의 광인

0개의 댓글