-
[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)); } }
- 위 코드의 출력 결과는 무엇인가요? 그 이유는 무엇인가요?
- 위 코드의 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 : 반환값이 없는 델리게이트
'개발일지 > 스파르타 코딩클럽 부트캠프' 카테고리의 다른 글
[TIL] 13주차 1일 유니티 2D 플레이어 피격 구현 ( OnTriggerEnter2D, Action ) (0) 2024.07.08 [TIL] 12주차 5일 유니티 스킬 장착, 스킬 슬롯 로직 (0) 2024.07.05 [TIL] 12주차 4일 ( Raycast2D로 연속점프 방지하기 _ 트러블슈팅 ) (0) 2024.07.04 [TIL] 12주차 2일 기술 면접 대비 (0) 2024.07.03 [TIL] 12주차 1일 ( FSM, 유한 상태 머신 ) (0) 2024.07.01