✅ 델리게이트 (Delegate) ?
- 메서드를 참조할 수 있는 타입으로, 이를 통해 함수 포인터 역할을 수행
- 특정 메서드를 대신 호출할 수 있고, 이벤트(Event)처리 및 콜백(callback)함수 구현에 자주 사용된다.
◾ 기본 구조
public delegate void MyDelegate(string message);
class Test
{
public static void PrintMessage(string msg)
{
Console.WriteLine($"메시지: {msg}");
}
}
MyDelegate del = new MyDelegate(Test.PrintMessage);
del("안녕하세요!");
>>> 메시지: 안녕하세요!
✅ 람다식 (Lambda Expression) ?
- 메서드를 간단하게 표현하는 문법
- 익명 메서드를 더 간결하게 사용
- delegate나 LINQ에서 자주 쓰인다.
◾ 기본 구조
(매개변수) => { 실행 코드 }
using System;
class Program
{
delegate void PrintMessage(string message);
static void Main()
{
PrintMessage printer = (msg) => Console.WriteLine($"출력된 메시지: {msg}");
printer("람다식 문자열 출력 예제");
}
}
>>> 람다식 문자열 출력 예제
✅ Func & Action ?
- 미리 정의된 제네릭 델리게이트 타입
- 델리게이트를 훨씬 간편하게 사용할 수 있다.
◾ Func
- 리턴값이 있는 델리게이트
- 마지막 타입 매개변수가 반환형(Return Type)
- 앞의 타입 매개변수들은 입력 매개변수(Parameters)
Func<int, int, int> add = (a, b) => a + b;
int result = add(3, 5);
>>> 8
◾ Action
- 리턴값이 없는 델리게이트
- 매개변수를 받을 수 있지만 반환을 하지는 않는다.
Action<string> greet = (name) => Console.WriteLine($"안녕, {name}!");
greet("철수");
>>> 안녕, 철수!
◾ 활용 예시 ( 게임 오버 이벤트 처리)
public class GameEventManager
{
public static Action OnGameOver;
public static void GameOver()
{
Console.WriteLine("Game Over Triggered");
OnGameOver?.Invoke();
}
}
GameEventManager.OnGameOver += () => Console.WriteLine("게임 오버 UI 띄우기!");
GameEventManager.OnGameOver += () => Console.WriteLine("점수 저장하기!");
GameEventManager.GameOver();
>>> Game Over Triggered
>>> 게임 오버 UI 띄우기!
>>> 점수 저장하기!