
이 포스팅은 제가 직접 공부하고 제 방식대로 내용을 정리한 글입니다.
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가 있습니다.