Delegate
- 메서드를 참조하는 객체로, 참조하는 메서드의 입력 매개변수와, 반환 타입을 포함한다
- 델리게이트는 명시적으로 정의되어야 하며, 호출하려는 메서드의 입력 매개변수와 반환 타입을 가져야 한다.
- 반환값은 마지막으로 호출된 메서드가 돌려준 값을 받는다, 이전 메서드들의 반환값은 폐기된다.
- 모든 대리자는, 대리자 체인을 만들 수 있다
Func
- 반환 타입이 void가 아닌 0 ~ n개의 매개변수인 메서드를 포함하는 제네릭 델리게이트이다
- 여러 개의 메서드를 한 번에 실행시킬 수 있다
Action
- 반환 타입이 void인 메서드를 위해 설계된 제네릭 델리게이트이다
- 여러 개의 메서드를 한 번에 실행시킬 수 있다
Lamda
- 원하는 기능의 메서드를 직접 선언하지 않고도 만들 수 있다
- 대리자를 간단하게 만들 수 있다
콜백
- 함수에서 인자로 다른 함수를 전달 받아서 실행하는 것이다.
- 특정 함수가 그때마다 지정된 기능을 하도록 한다.(시간이 지난후에 호출 가능)
Call Back
하나의 함수를 다른 함수 실행의 인자로 전달한다. 구현하고자 하는 기능에 따라서 전달 받은 함수의 호출 시점을 지정할 수 있다.기본적인 Call Back 구현using UnityEngine;public class Test : MonoBehaviour{ p
fore4022.tistory.com
대리자 체인
- 여러가지 메서드를 등록, 삭제 할 수 있다
- 등록된 메서드를 순서대로 호출한다, 먼저 호출된 메서드가 종료된 후에 다음 메서드가 실행된다
대리자 이벤트
- 작업의 실행을 알린다
- 사용자 조작 또는 속성의 값 변경이 일어났을 때, 상태들의 변화가 필요한 외부 함수에 전달해 주는데 유용하다
- 할당 연산자 사용 불가
코드
delegate
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Base : MonoBehaviour
{
public delegate void MyDelegate();//델리게이트 선언
MyDelegate myDelegate;
private void Start()
{
myDelegate += Print;//메서드 등록
myDelegate();
}
public void Print()
{
Debug.Log(”hello, world”);
}
}//실행 결과 : hello, world
func
using System;
using UnityEngine;
public class Test : MonoBehaviour
{
Func<bool> myFunc;//대리자 선언
private void Start()
{
myFunc += Func1;//메서드 등록
if (myFunc())
{
Debug.Log("Func True");
}
myFunc -= Func1;//메서드 해제
myFunc();
myFunc += Func2;//오류 발생 -> 반환 형식이 일치하지 않음
}
public bool Func1()
{
return true;
}
public void Func2()
{
Debug.Log(", Func2");
}
}//실행 결과 : Func True가 출력되는 것을 확인할 수 있다.
action
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class Base : MonoBehaviour
{
Action myAction;//대리자 선언
private void Start()
{
myAction += Action_A;//메서드 등록
myAction += Action_B;//메서드 등록
myAction += Action_C;//메서드 등록
myAction();
}
public void Action_A()
{
Debug.Log(”Action_A”);
}
public void Action_B()
{
Debug.Log(”, Action_B”);
}
public void Action_C()
{
Debug.Log(”, Action_C”);
}
}//실행 결과 : Action_A, Action_B, Action_C
lamda
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Base : MonoBehaviour
{
delegate int MyDelegate(int x, int y);
private void Start()
{
MyDelegate myDelegate = (x, y) ⇒ x + y;
int a = myDelegate(1, 1);
Debug.Log(a);
}
}//실행 결과 : 2
'유니티 > 개념 정리' 카테고리의 다른 글
| Generic (0) | 2024.07.22 |
|---|---|
| New Input System (0) | 2024.07.19 |
| Indexer (0) | 2024.05.09 |
| Type (0) | 2024.03.26 |
| async, await란? (0) | 2024.03.21 |