본문 바로가기

내배켐 Unity TIL

Unity 10일차 TIL - 델리게이트(Delegate), 람다(Lamda)

1. Delegate

delegate는 method를 참조하는 타입이다.

delegate를 이용하면 method를 매개변수로 전달하거나 변수에 할당할 수 있다.

 

ex) 사용 예시

delegate void MyDelegate(string message);

static void Method1(string message)
{
    Console.WriteLine("Method1: " + message);
}

static void Method2(string message)
{
    Console.WriteLine("Method2: " + message);
}

class Program
{
    static void Main()
    {
        // delegate instance 생성 및 method 등록
        MyDelegate myDelegate = Method1;
        myDelegate += Method2;

        // delegate 호출
        myDelegate("Hi!");
        
        // 출력
        // Method1: Hi!
        // Method2: Hi!
    }
}

위 예시 코드처럼 사용할 수 있으며, 하나 이상에 method도 등록할 수 있다.

 

예시 코드처럼 delegate나 method 둘 다 접근할 수 있는 상황에서 굳이 delegate를 사용해야되는지 생각할 수 있지만, 접근이 어려운 경우에 사용이 유용하다고 한다.

 

2. Lamda

lamda는 익명 method를 만드는 방법이다.

lamda를 사용하면 method의 이름 없이 method를 만들 수 있다.

그래서 delegate를 사용하여 변수에 할당하거나, method의 매개변수로 전달할 수 있다.

물론 그냥 변수에도 사용할 수 있다. ex) bool IsDead => Health <= 0;

 

ex) 사용 예시

// 형식
(parameter_list) => expression

// 구현 예시
delegate int Calculate(int x, int y);

Calculate sum = (x, y) => 
{	
    return x + y;
};

// method로 구현하는 부분이 한 줄인 경우 {} 생략
Calculate sum = (x, y) => x + y;

 

method를 사용하고 싶지만 여러 곳에 중복적으로 사용되지 않고, 간단하게 사용할 때 lamda 방식을 활용하면 쉽게 코드를 구현할 수 있었다.