[C#] 델리게이트(Delegate)와 람다식(Lambda Expression)

장민제·2025년 4월 15일

C# Study

목록 보기
10/11
post-thumbnail

✅ 델리게이트 (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(); // 구독자 전부 호출
    }
}

// 사용 예시: GameManager에서 구독
GameEventManager.OnGameOver += () => Console.WriteLine("게임 오버 UI 띄우기!");
GameEventManager.OnGameOver += () => Console.WriteLine("점수 저장하기!");

// 게임이 끝날 때
GameEventManager.GameOver();

>>> Game Over Triggered
>>> 게임 오버 UI 띄우기!
>>> 점수 저장하기!

profile
Unity, C#

0개의 댓글