람다식, 너는 어디에서 왔니?

처음으로 만들어 보는 람다식

// 람다식 선언 방법
매개변수목록 => 식

// 람다식 사용 예시
delegate int Calculate (int a, int b);

static void Main(string[] args)
{
    // 두 개의 int 형식 매개 변수 a, b를 받아 이 둘을 더해 반환하는 익명 메소드를 람다식으로 선언.
    Calculate calc1 = (int a, int b) => a + b;

    // C# 컴파일러는 형식 유추(Type Inference)라는 기능이 있기 때문에 아래와 같이 선언해도 된다.
    Calculate calc2 = (a, b) => a + b;

    // 델리게이트 익명 메소드를 이용하면 아래와 같이 기술된다.
    Calculate calc3 = delegate(int a, int b)
                      {
                          return a + b;
                      }
}

문 형식의 람다식

// 문 형식의 람다식 선언 방법
(매개변수목록) => {
                      문장 1;
                      문장 2;
                      문장 3;
                  }

// 문 형식의 람다식 사용 예시
delegate void DoSomething ();

static void Main(string[] args)
{
    // 매개 변수가 없으면 ()에 아무것도 넣지 않는다.
    DoSomething DoIt = ( ) => {
                                  Console.WriteLine("1");
                                  Console.WriteLine("2");
                                  Console.WriteLine("3");
                              }
}

Func와 Action으로 더 간편하게 무명 함수 만들기

Func 델리게이트

// Func 델리게이트 사용 예시
Func<int> func1 = () => 10; // 입력 매개변수는 없으며 반환은 int
Func<int, int> func2 = (x) => x * 2; // 입력 매개변수는 int, 출력 매개 변수도 int
Func<int, int, int> func3 = (x, y) => x + y; // 입력 매개변수는 int, int 출력 매개 변수도 int

Action 델리게이트

// Action 델리게이트 사용 예시
Action act1 = () => Console.WriteLine("Action()");
act1();

int result = 0;
Action<int> act2 = (x) => result = x * x; // 람다식 밖에 선언된 result에 x * x가 대입 된다.
act2(3);
Console.WriteLine("result: {0}", result); // 9가 출력 됨.

Action<double, double> act3 = (x, y) => {
            double pi = x / y;
            Console.WriteLine("Action<T1, T2>({0}, {1}): {2}", x, y, pi);
        }
act3(22.0, 7.0);

식 트리

Untitled