개발일지/스파르타 코딩클럽 부트캠프

[TIL] 12주차 3일 기술면접 대비

치치베베 2024. 7. 5. 09:54

 

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. 델리게이트를 사용하여 메서드를 매개변수로 전달하는 장점은 무엇인가요?

 

 

1. 7, 12, 35

델리게이트는 구독해놓은 함수를 모두 호출한다. 처음에 Add를 먼저 구독시켜 3, 4를 더한 결과를 출력하고

그 후 Multiply를 구독시켜 7, 5 의 더한 값과 곱한 값을 출력한다.

 

2. 같은 방식으로 동작한다.

이유는 Func<> 는 기본적으로 앞의 두 값을 이용하여 뒤의 값으로 결과를 나타내는 형태의 델리게이트이다.

따라서 앞의 int 3, 4와 7, 5 를 가지고 결과값을 가져오기 때문에 같은 결과가 나온다.

 

3. 델리게이트를 사용하여 메서드를 매개변수로 전달하면 필요한 메서드들을 미리 모두 구독시켜놓고

특정 값을 한 번의 전달로 한 번에 구독된 메서드를 다 사용할 수 있는 장점이 있다.

 

설명문제

 

  1. 콜백이란 무엇인가요? 콜백을 사용해본 경험이 있을까요?
  2. 델리게이트(delegate; 대리자)란 무엇인가요?
  3. C#의 event란 무엇인가요?
  4. Unity에서 사용하는 델리게이트 혹은 이벤트에는 어떤 것이 있나요?

1. 콜백이란 피호출자가 호출자를 다시 호출하는 것을 말하는데, 풀어서 설명해보면 호출자가 피호출자를 호출하고

할 일을 하다가 때가 되면 피호출자가 다시 호출자를 호출하는 것을 말한다(?), 보통 인풋시스템을 사용할 때 많이 사용했던 것 같다.

 

2. 델리게이트란 간단하게는 메서드를 변수처럼 쓰기위해서 사용한다. 위의 콜백과 연관지어서 보면 대리자로써 콜백의

중간과정에서 도와주는 역할이라고 볼 수 있다.

 

3. event는 클래스 내에서 특정한 일이 일어났을 때 외부의 가입자(subscriber)들에게 알려주는 기능을 한다.

클래스 내에서 일종의 필드처럼 정의된다.

 

4. UnityAction 과 UnityEvent, 그리고 Func와 Action이 있다. 

UnityAction : 파라미터가 없는 델리게이트

UnityEvent : 유니티에서 제공하는 이벤트 시스템

Func : 반환값이 있는 델리게이트

Action : 반환값이 없는 델리게이트