본문 바로가기

ASP.net with C# (웹폼)

C# 람다식이란?

1. 람다식의 의미

람다(Lambda)라는 용어와 C#에서 제공하는 람다식과는 어떤 연관관계가 있는 것일까요? 람다라는 단어가 생소하니 람다식이라고 하면 언뜻 그 의미가 잘 떠오르질 않습니다. (개념이 궁금하신 분은 나무위키를 참고하시기 바랍니다)

이 글에서는 LINQ에서 람다식의 활용에 한정해서 설명하도록 하겠습니다. 일단 다른건 다 잊으시고 람다식 = 익명함수를 의미한다 라고 이해하시기 바랍니다. 결론부터 얘기하자면 람다식은 다음과 같은 코드를 의미합니다.

x => x*10

위의 코드 한 줄이 우리가 알아야 하는 람다식의 전부입니다. =>연산자 때문에 괜히 어렵게 느껴지는 위의 식은 x를 파라미터로 받아 x*10한 결과를 리턴하는 함수를 의미합니다. 익명(무명) 메소드와 비슷하죠.

2. 람다식의 형식

람다식(Lambda expressions)은 익명메소드의 확장된 형태입니다. 프로그래밍을 하다보면 어떤 기술이나 문법에 대해 장황하게 늘어놓은 설명을 보면 더욱 알 수 없게 되는 경우가 많은데요, 그러다 보니 백번 듣는 것 보다 한 줄 코딩이 낫다는 말도 하곤 하죠. 람다식이 딱 그렇습니다. "람다식은 개체로 처리되는 코드 블록(식 또는 문 블록)입니다. 이 식은 인수로 메서드에 전달할 수 있으며 메서드 호출에서 반환될 수도 있습니다"란 설명을 보고 그 의미가 명확히 이해되는 사람이 얼마나 있을까요? 제 생각엔 람다식의 최대 장점은 인라인 함수로 사용할 수 있다. 즉, 코드가 간결해 진다는 점입니다.

위의 식은 다음과 같이 사용할 수도 있습니다. 즉, 모두 같은 의미입니다.

x => x*10
(int x) => x*10
(int x) => (x*10)
x => {return x*10;}
(int x) => {return x*10;}

즉 파라미터의 타입을 선언해도 되고 생략해도 되고, 타입선언을 하면 괄호를 쳐야하고, return를 써도되고 안써도되는데 쓰려면 {}로 감싸줘야 한다. 뭐 이런겁니다. 

 

파라미터가 두 개 이상일때도 크게 다르지 않습니다.

(x, y) => x*y
(int x) => x*10
(int x, int y) => x*y

파라미터 => 표현식 이라 얘기할 수 있는데, 아래와 같이 파라미터 => 처리구문 으로도 표현할 수 있습니다.

x => {return x*10}

 

x => x*10와 (int x) => x*10 와 는 모두 결과가 동일합니다. 그럼 여러분은 어떻게 사용하시겠습니까? 당연히  x => x*10 겠죠? 가장 간단한 이 표현식 외에 다른 표현은 머릿속에서 지워버리시기 바랍니다. 람다식은 LINQ에서 사용하기 위한 용도로 생각해 주세요.

 

프로젝트의 성공을 기원합니다.