게임개발 캠프 17일차

IIRU·2026년 6월 9일

Delegate

delegate는 함수를 담을 수 있는 자료형이라고 생각하면된다.

delegate void MyDelegate();
delegate int IntDelegate();
delegate int IntDelegate2(int i, int j);

이렇게 사용한다.
앞에 선언한 자료형이 void면 void만 담을 수 있다.

public static void TestFunc()
{
    Console.WriteLine("1");
}
public static void TestFunc2()
{
    Console.WriteLine("2");
}

이런 함수가 있을 때

MyDelegate myDelegate = TestFunc;

delegate를 선언하고 함수를 담을 수 있다.

myDelegate += TestFunc2;

함수를 여러개 담을 수 있는데 첫번째 함수가 실행되고 두번째 함수가 실행된다.

출력은 1 > 2 순서로 된다.

Callback

쉽게 말하면 delegate로 함수를 실행할 때 불러온 함수로 또 다른 함수를 불러올 수 있는데 그걸 callback이라고 한다.

예시를 보자

delegate static void BuyCallback();
static void Main()
{
  	BuyCallback buyCallback = ShowPopup;
	BuyItem(buyCallback);
}
static void BuyItem(BuyCallback callback)
{
	Console.WriteLine("아이템 구매");
  	callback();
}
static void ShowPopup()
{
	Console.WriteLine("팝업 보여주기");
}

buyItem을 실행했을 때, 아이템 구매를 출력후, callback을 한번 더 실행하는데 callback에는 ShowPopup() 함수가 들어있기 때문에 ShowPopup()도 실행하게 된다.

이것이 callback이다.

Action

delegate를 편하게 쓰기위해 만들어진 것.

사용법은

Action action;
action = A;

static void A() // 함수 반환형이 void
{

}

이렇게 사용한다.
Action은 반환형이 void일 때 사용할 수 있다.

Func

Func<int> func;
func = F;

static int F()
{
    return 0;
}

Func은 반환형을 다양하게 사용할 수 있다.

Func은 다르게도 사용 가능하다.

Func<float, int> func1;
func1 = F2;

static int F2(float i)
{
    return (int)i;
}

설명을 하자면, 반환형이 int고 매개변수가 float일 때 이다.
매개변수는 너무 많이는 안되지만 여러개 가능하다.

Func<int, float, int> func2;
func2 = F3;

static int F3(int a, float b)
{

	return 1;
}

이렇게도 가능하다.

Predicate

Predicate<int> predicate;

반환형이 bool일때 사용가능하다.

Func<int, bool> f;

이것과 동일하다.

event

public event Action<int> action;
//event가 붙으면 값을 더하거나 빼기 밖에 안된다.
//player.action = null;
//player.action(); 두개는 안됌.

이벤트는 외부에서 직접 호출 / 초기화 방지, 등록만 허용 되기 때문에 더하거나 빼기 밖에 안된다.

그래서 event가 선언된 클래스 내에서만 Invoke를 해줄 수 있다.

player.action?.Invoke();

이렇게 사용해야한다.
?는 무엇이냐면 만약null일 경우 함수를 사용하지 않겠다는 의미이다.

profile
초보 개발자 블로그입니다!

0개의 댓글