삽질의 현장/- .NET

#056_닷넷(.NET)_.Net Framework 기본 - 람다(Lamda)

shovelman 2015. 11. 4. 20:39


안녕하세요 삽잡이입니다.


이번 시간에는 람다에 대해서 알아보려고합니다.



익명 메서드를 보다 쉽게, 축약해서 사용하자는 뜻이 이루어져

'람다'라는 것이 탄생됬습니다.



이와 같은 식을 '람다 식'이라고 부릅니다.



그리고 이와 같이 귀여운 기호를 바로, '람다 기호'라고 부릅니다.


람다는 익명 메서드를 좀 더 간단하게 만들기 위해서

메서드, 정의, 기능을 아주 임시적으로! 쉽게! 내리기 위해서 만든 기능입니다.


익명 메서드는 이름이 없는 메서드이지만,

람다 식은 익명 메서드를 더 쉽게 만들어 낼 수 있는 문법이라는 것입니다.


우선, 람다식이 왜 나왔나요...

callback 하다가 어떻게 저렇게 요렇게 하다가 람다까지 왔습니다.


아무튼...

람다는 거의 predicate를 위해서 만들어 놓은 문법입니다. (지난 시간에 배웠지요...)

모든 영역의 메서드에서 사용되는 것이 아닙니다.

대부분 predicate가 지정되어 있는 곳에 익명 메서드로써 사용이 되는 곳이 

바로, 람다가 있어야 할 위치입니다.

이런 곳이 매우 많기 때문에 람다라는 문법을 만들어 낸 것입니다.


람다 식에서 만약 인수가 하나라면 괄호를 안치고 생략해도 됩니다.

어찌됬건 중요한 것은 왼족엔 인수, 오른쪽엔 행동을 써야한다는 사실입니다.


람다의 특징을 몇가지 살펴보도록 하겠습니다.

우선, 람다식은 어마어마하게도 return이 생략이 가능합니다.

즉, 람다식을 알아서 익명 메서드로 변환시켜주는 것이지요...



람다는 4가지 방식으로 사용될 수 있습니다.


우선, 가장 단순하게 모든 것을 생략한 람다식,

형식을 명확하게 써둔 람다식,

형식을 생략하고 인자가 있다는 것을 명확하게 한 람다식,

식이 어디 까지라고 명확하게 해준 람다식.


크게 네 가지로 표현할 수 있습니다.



람다식은 문장이 하나라면 괄호를 생략해서 사용이 가능하지만,

세미 콜론(;)이 여러개 있다는 소리는 문장이 여러개라는 뜻이지요.

따라서, 식이 하나가 아닌 문장이 여러개가 올 때의 람다식은 블럭을 사용할 수 있습니다.

즉, 블럭 끝이 올 때 까지 끝나는게 아니라는 소리입니다.

세미 콜론(;) 이 있다면 꼭 블럭이 있어야합니다.

아무튼... 우리는 문장이 올 때 블럭을  쓴다는 사실을 알게 됬습니다.


생각보다 간단하지 않습니까?


콜백이 있는 곳에서는 대부분 이벤트가 사용됩니다.

그 중에서도 조건을 비교(판단)해야하는 대부분의 곳에서는 (닷넷에서는 100%)

predicate가 사용됩니다.


대부분의 predicate를 쓰는 곳에서는 

직접 bool 형식을 반환하는 함수, 익명 메서드, 람다를 지정할 수 있게 되지요.


람다식에도 몇가지의 종류가 있습니다.

즉, 인수 개수, 종류, 행동을 더 다양하게 쓸 수 있다 이겁니다.


그런데, 여러분이 오해하실 수 있는데 

무조건 람다는 predicate로 사용되는 것이 아닙니다.

predicate는 어떤 조건에도 사용이 되는데 

굳이 이 predicate가 아니어도 람다가 사용될 수 있다는 것입니다.


predicate나 람다나 모두 다 대리자로부터 시작됬기 떄문에 다 대리자에 관련된 내용입니다.

즉, 대리자와 연관되어있다 이겁니다.

따라서 람다는 무조건 조건을 판단하는 메서드가 아닌, 

다른 용도로도 쓰일 수 있다는 사실을 기억하시길 바랍니다.



또한, 이벤트 핸들러를 람다를 통해 사용할 수 있습니다.

메서드를 만들 필요 없이! 메서드를 찾아거 확인할 필요 없이!

간단하게 사용할 수 있다 이겁니다.


이번 시간은 여기까지 하도록 하겠습니다.


이상 삽잡이였습니다!