본문 바로가기

C#/람다식

람다식의 기초

메서드를 인수로 넘겨준다.

 

public int Count(int[] numbers, Predicate<int> judge)

{

    int count = 0;

    foreach(var n in numbers)

    {

        if(judge(n) == true) count++;

    }

    return count;

}

 

위와 같이 숫자를 세는 메서드를 만든다고 할 때 '짝수를 센다' 또는 '홀수를 센다' 등 다른 조건으로 숫자를 세도록 할 경우

--> if문 안에서 조건을 판단하는 메서드를 넘겨 받아서 여러 조건중 원하는 조건을 선택하면 편리할 것이다.

 

람다식은 이렇게 메서드를 인수로 넘겨받아 작성하는 코드를 간결하게 작성하도록 해준다.

 

위에서 정의한 Count 메서드를 호출하여

람다식을 적용, 짝수의 개수를 구하는 방법

var count = Count(numbers, n=>n % 2 == 0);

 

 

람다식을 가장 길게 풀어 쓴 것부터 위에 나온 것처럼 가장 간결하게 쓴 것까지 변화하는 모습

1.

Predicate<int> judge = 

(int n) =>{

    if(n % 2 == 0)

        return true;

    else

        return false;

};

 

var count = Count(numbers, judge);

 

judge 변수에 대입한 우변이 람다식이다.

람다식은 일종의 메서드이다.

C# 2.0에 있는 delegate 키워드가 대신 =>(람다 연산자)가 사용된다.

 

(좌변인수 선언) => (우변메서드의 본문)

 

이 람다식이 judge 변수에 대입되고 그 judge 변수가 Count 메서드의 인수에 전달된다.

 

 

2.

judge 변수는 대입하고 나서 바로 Count의 인수로 전달되므로 이 변수를 없에고 식을 직접 Count 메서드의 인수로 지정

 

var count = Count(numbers,

    (int n) => {

        if(n % 2 == 0)

            return true;

        else

            return false;

    };

};

 

 

3.

다음의 두 가지 이유로 if 문을 없엘 수 있다.

  - return의 오른쪽에 식을 쓸 수 있다.

  - 'n % 2 == 0'은 식이며 bool 형의 값 (식 성립하면 true, 성립하지 않으면 false)을 갖는다.

 

var count = Count(numbers, (int n) => {return n % 2 == 0});

 

 

4.

람다식에서 {}가 하나의 명령문을 포함할 때는 {} 와 return을 생략할 수 있다.

 

var count = Count(numbers, (int n) => n % 2 == 0);

 

 

5.

람다식에서는 인수의 형을 생략할 수 있다.

컴파일러가 형을 제대로 추론해주므로 형을 명시하지 않아도 된다.

 

var count = Count(numbers, (n) => n % 2 == 0);

 

 

6.

인수가 한 개인 경우에는 ()를 생략할 수 있다.

 

var count = Count(numbers, n=>n % 2 == 0);

 

 

 

'C# > 람다식' 카테고리의 다른 글

List<T> 클래스와 람다식의 조합  (0) 2021.05.20