Eungene's Imaginations...

ASP.net - Lambda Expression(람다식) 본문

Programming/ASP.net(MVC&Core)

ASP.net - Lambda Expression(람다식)

Eungene's 2015. 11. 24. 14:18
728x90
반응형

ASP MVC를 하다 보면, 람다를 꼭 알고 넘어가야 한다.

람다를 굳이 하기 싫다면 안해도 된다.

하지만, 람다를 안하게 되면, 소스코드 라인수만 길어지기 때문에 쓰는것을 권장한다.


람다는 우리가 흔히 쓰는 메소드(C에서는 함수)를 굉장히 간략하게 만들어 주는데, 아래 소스들을 통해서 비교를 해보도록 하겠다.


1
2
3
4
5
6
7
8
public ViewResult BreakBrainExample() {
      var results = addMethod(510);
      return View("Result", (object)String.Format("결과값: {0}", results));
}
 
 public int addMethod(int a, int b) {
      return a + b;
}
cs

위의 소스가 평소 C#을 다룰 때 이용하는 방식이다.
평소 C나 java를 다뤘던 사람들이라면, 위 방식으로 많이 이용했고, 당연시 해왔단 방식이기에,
그렇게 어렵지도 않고, 그냥 메소드만 하나 추가해서 사용할 뿐이다.

하지만, 저 addMethod말고도 뺄셈, 곱셈, 나눗셈 까지 있어야 하는 메소드라면?
그렇게 되면, 우리는 곱셈을 해주는 메소드를 하나 더 만들거나~
사용자에게 어떤 사칙연산을 할 것인지 값을 입력받은 다음에 거기에 대한 처리를 하나하나
귀찮게 생성을 해주어야 할 것이다.

다른 예로, addMethod는 그저 간단한 덧셈을 해주는 메소드라 큰 상관은 없겠지만,
코드가 길어지게 되면, 나 혼자라면 상관이 없지만, 다른 협업 개발자가 코드를 분석하는데, 더 오랜 시간을
쓰게 될 것이다.

람다식은 내가 어떻게 쓰느냐에 따라 소스코드들을 매우 간략하게 표현해 줄 것이다.

아래 코드가 람다식이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
delegate int CompareLambda(int number1, int number2);
 
public ViewResult UsingLambda() {
        CompareLambda result = null;
 
        result = (number1, number2) => (number1 + number2);
        var add = result(510);
 
        result = (number1, number2) => (number1 - number2);
        var minus = result(510);
 
        result = (number1, number2) => (number1 * number2);
        var multi = result(510);
 
        result = (number1, number2) => (number1 / number2);
        var div = result(510);
 
        return View("Result", (object)String.Format(
            "더하기->{0} 빼기->{1} 곱하기->{2} 나누기->{3}"
            add, minus, multi, div));
}
cs


위 코드에서는 람다식을 쓰기 위해서 델리게이트를 선언해주었다.
그리고 델리게이터에 람다식을 적용해 주었는데, 형식은 정말 간단하다.

람다식의 첫 번째 괄호는 해당 메소드에 사용할 파라미터(인자)값을 명시해 준 부분이고,
=>는 메소드 리턴값을 명시해준다.


람다식의 사용은 MVC를 다루면서 요긴하게 쓸 수 있는 부분이기 때문에,
우선은 '=>'를 사용하는 것은 람다식이라고 보면 된다.


위 소스들은 delegate를 사용하여 사용한 람다 형식이라면, delegate없이 람다식을 쓸 수 있다.
아래의 소스가 그렇다.


1
2
3
int[] numbers = { 12345678};
 
IEnumerable<int> odds = numbers.Where(n => n % == 1);
cs

위에 명시된 소스를 보면, numbers 배열안에 들어 있는 숫자들 중에,
홀수인 숫자들만 골라서 odds에 대입을 하는 코드이다.
이 소스는 delegate없이 n이라는 변수가 정확히 어떤 변수라는 것을 명시해주지 않았을 뿐더러, 너무 간략하다.

n=>n%2==1을 굳이 풀어서 써 보자면, 아래 소스코드와 같다.

1
 IEnumerable<int> odds = numbers.Where(delegate(int n){return n%2==1;}); 
cs


하지만, 이렇게 하나하나 return까지 적어가면서 할 필요 없이 n=>n%2==1 로 정말 간략하게 해결을 할 수가 있다.

람다식에 대한 더욱 자세한 설명은 MSDN에 잘 나와있기에 꼭 한번정도는 짚고 넘어가보길 바란다.
https://msdn.microsoft.com/ko-kr/library/bb397687.aspx

반응형
Comments