Unity3d C# toolba 사용해보기

C# 람다식 ( Lambda Expression)을 알아보겠습니다.

안녕하세요 메르세데스입니다. 지겨운 델리게이트에서 벗어났습니다 이번에 알아볼 것은 람다식 입니다. 저에겐 처음 들어보는 단어인데요.. 기원은  수학식에서.. 나온 말이네요.. 분명하고 간결한 방법으로 함수를 표현하고 싶은 것에서 기원이 되었다고 합니다.

좀 더.. 인간 언어에 가까운 프로그래밍표현이라고 해야겠네요..   

이것은 익명메소드를 대체하기 위해서 만들어진 또 다른 기능입니다. delegate에서도 이런 이름 없는 method를 처리하는 방법이 있었는데요 이것을 좀 더 간결하게 표현할 수 있는 방법을 제공합니다.

이것에 익숙해지면 기존의 방법을 안 쓰고 람다식으로 모두 표현할 수 있다고 합니다... 그렇다면 왜 지겹고 힘들게 델리게이트를 배웠던 것일까요? ㅜㅠ  

이유가 있었네요..Lambda식의 경우 C#의 3.0부터 도입이 되었는데요 그 이전에 만들어진 것과 호환이 안되면 안되니.. 있는 거라고 합니다. 헐!

그쵸.. 개발툴 버전이 올라가면.. 이전 소스에서 컨버전 안되는 것이 많이 발생한다면 정말 큰 문제가 되거든요..  이런 문제는 비단 C#만의 문제는 아닐 것 입니다. 

그렇다면 델리게이트의 익명메소드를 전부다 해결할 수 있다는 람다식의 표현 방법이 대체 어떤 것인지 알아보도록 하겠습니다.



C#익명메소드델리게이트

이러한.. 구문이 있다고 하죠..   제 나름대로.. 이것도 정말 간결한 방법이라고 생각하는데요.. 익명 메소드를 선언 한거죠?

이걸 람다식 표현으로 나타낸다면 이렇게 됩니다!

Calc cl = (a, b) => a + b;

또한 if , else if 등의 조건식도 표현이 가능합니다.

(매개변수) => {   문장1;
                        문장2;
                        ...       };

저는 C#을 줄곧 사용해본 적이 없기 때문에 정확히는 잘 모르겠지만..  소스가 간결해져서 보기 좋습니다.
 => 이런 연산자가 중간에 있어 이상하긴 하지만.. 나름대로 괜찮아 보입니다.   이것 역시 마찬가지로.. 사용하기 위해서는
delegate를 선언해 줘야 하긴 합니다 만..    정말 간결 그 자체네요..  


한발 더 나가서.. 선언해주는  람다식을 이용하기 위해서 선언한 델리게이트 조차도 생략할 수 있습니다.  일반화를 이용해서 프레임워크 단에서... 이런 귀찮음을 해결해줬네요.. 

예제를 볼까요??

C# Lambda Example


위의 예제를 보면.. 특별히 delegate를 선언하지 않았지만.. Func<int> ... 이런 식으로 사용할 수 있습니다. 미리 만들어 놨다는 거죠.. 익명이기 때문에..  그냥 형식만 갖춰서 사용하면 된다 이겁니다. 정말 간편하겠네요..


매개변수가 없는 것부터.. 16개까지 있는 것을 사용할 수 있습니다.  

또한.. Func, Action (delegate) 두 가지 종류가 있는데요..  차례대로.. 결과를 반환하는 것과 반환하지 않는 것! 으로 분류됩니다. 

정말 필요한 것을 편하게.. 그리고 귀찮음을 덜하게.. 머리를 잘 썼네요 칭찬하고 싶습니다 진심으로요..! 일반화하여서 사용하면 형 식에 얽메이지 않고 사용이 가능하겠습니다. 맞춰주기만 하면 됩니다.  기존에 배웠던 것을 잊어도 되겠네요 ..

이상으로 C#의 람다식에 대해 알아봤습니다. 감사합니다.








댓글