[TIL] 12주차 3일 기술면접 대비
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));
}
}
- 위 코드의 출력 결과는 무엇인가요? 그 이유는 무엇인가요?
- 위 코드의 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. 델리게이트를 사용하여 메서드를 매개변수로 전달하는 장점은 무엇인가요?
1. 7, 12, 35
델리게이트는 구독해놓은 함수를 모두 호출한다. 처음에 Add를 먼저 구독시켜 3, 4를 더한 결과를 출력하고
그 후 Multiply를 구독시켜 7, 5 의 더한 값과 곱한 값을 출력한다.
2. 같은 방식으로 동작한다.
이유는 Func<> 는 기본적으로 앞의 두 값을 이용하여 뒤의 값으로 결과를 나타내는 형태의 델리게이트이다.
따라서 앞의 int 3, 4와 7, 5 를 가지고 결과값을 가져오기 때문에 같은 결과가 나온다.
3. 델리게이트를 사용하여 메서드를 매개변수로 전달하면 필요한 메서드들을 미리 모두 구독시켜놓고
특정 값을 한 번의 전달로 한 번에 구독된 메서드를 다 사용할 수 있는 장점이 있다.
설명문제
- 콜백이란 무엇인가요? 콜백을 사용해본 경험이 있을까요?
- 델리게이트(delegate; 대리자)란 무엇인가요?
- C#의 event란 무엇인가요?
- Unity에서 사용하는 델리게이트 혹은 이벤트에는 어떤 것이 있나요?
1. 콜백이란 피호출자가 호출자를 다시 호출하는 것을 말하는데, 풀어서 설명해보면 호출자가 피호출자를 호출하고
할 일을 하다가 때가 되면 피호출자가 다시 호출자를 호출하는 것을 말한다(?), 보통 인풋시스템을 사용할 때 많이 사용했던 것 같다.
2. 델리게이트란 간단하게는 메서드를 변수처럼 쓰기위해서 사용한다. 위의 콜백과 연관지어서 보면 대리자로써 콜백의
중간과정에서 도와주는 역할이라고 볼 수 있다.
3. event는 클래스 내에서 특정한 일이 일어났을 때 외부의 가입자(subscriber)들에게 알려주는 기능을 한다.
클래스 내에서 일종의 필드처럼 정의된다.
4. UnityAction 과 UnityEvent, 그리고 Func와 Action이 있다.
UnityAction : 파라미터가 없는 델리게이트
UnityEvent : 유니티에서 제공하는 이벤트 시스템
Func : 반환값이 있는 델리게이트
Action : 반환값이 없는 델리게이트