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));
}
}
1. 위 코드의 출력 결과는 무엇인가요? 그 이유는 무엇인가요?
2. 위 코드의 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));
}
3. 델리게이트를 사용하여 메서드를 매개변수로 전달하는 장점은 무엇인가요?
이유: 첫 번째 출력 결과는 Add 메서드가 호출되어 3 + 4 = 7이 출력됩니다.
두 번째 출력 결과는 Multiply 메서드가 호출되어 7 * 5 = 35가 출력됩니다.
Func<int, int, int> 델리게이트는 두 개의 int 매개변수를 받고 int 값을 반환하는 메서드를 나타냅니다.
Add와 Multiply 메서드는 이 시그니처와 일치하므로, Func<int, int, int> 델리게이트에 할당될 수 있습니다.
콜백(Callback)은 특정 이벤트가 발생했을 때 호출되는 함수를 의미합니다. 콜백은 비동기 프로그래밍 패턴에서 많이 사용되며, 어떤 작업이 완료되었을 때 그 결과를 처리하는 용도로 활용됩니다. 예를 들어, 파일 다운로드가 완료되면 다운로드 완료 콜백 함수를 호출하여 다운로드된 파일을 처리할 수 있습니다. 아직 사용해본 경험은 없습니다.
델리게이트(Delegate)는 메서드를 캡슐화하는 데이터 형식입니다. 델리게이트를 사용하면 메서드를 변수처럼 다룰 수 있어 코드의 유연성과 재사용성이 높아집니다. 델리게이트는 메서드의 시그니처(매개변수와 반환 타입)와 일치해야 하며, 델리게이트 변수에 메서드를 할당하거나 델리게이트 변수를 매개변수로 전달할 수 있습니다.
C#의 이벤트(Event)는 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다. 이벤트는 특정 상황이 발생했음을 알리는 메커니즘입니다. 이벤트는 델리게이트를 사용하여 구현되며, 이벤트 발생 시 등록된 이벤트 핸들러가 호출됩니다. 이를 통해 객체 간 느슨한 결합을 달성할 수 있습니다.
Unity에서는 다음과 같은 델리게이트와 이벤트를 사용합니다:
UnityAction: 매개변수 없이 void를 반환하는 델리게이트
UnityAction T: 하나의 매개변수와 void를 반환하는 델리게이트
UnityEvent: UnityAction 델리게이트를 기반으로 한 이벤트
UnityEvent T: UnityAction T 델리게이트를 기반으로 한 이벤트
MonoBehaviour.OnEnable(), MonoBehaviour.OnDisable() 등의 생명 주기 이벤트
InputSystem의 입력 이벤트
EventSystem의 UI 이벤트